Я занимаюсь обновлением наших внутренних приложений с MySQL 5.0.45 до 5.1.41. В старой среде мы зеркалировали некоторые таблицы, используя символические ссылки из одной БД в другую. По нескольким причинам текущие версии MySQL полностью блокируют это.
Что показалось лучшей заменой, так это использование представления, но у меня проблема. В некоторых старых таблицах имена столбцов начинаются с заглавной буквы. Однако часть нашего кода приложения (PHP) выполняет SELECT с заглавными именами, а также некоторые SELECT с именами столбцов в нижнем регистре. Что обычно работает нормально, потому что MySQL возвращает таблицы с заглавными буквами имени столбца, как вы указали его в SELECT. Однако с той точки зрения, что это, похоже, не так.См. Следующее:
create table t(A int);
Query OK, 0 rows affected (0.18 sec)
> create view v as select A from t;
Query OK, 0 rows affected (0.00 sec)
> insert into t values(47);
Query OK, 1 row affected (0.01 sec)
> select a from t;
+------+
| a |
+------+
| 47 |
+------+
1 row in set (0.00 sec)
> select a from v;
+------+
| A |
+------+
| 47 |
+------+
1 row in set (0.00 sec)
Обратите внимание, что использование заглавных букв в имени столбца, возвращаемом в запросах SELECT, различается вне зависимости от того, выбираете вы из таблицы или представления. Таблица возвращает заглавные буквы, как указано в вашем запросе во время выполнения; представление возвращает заглавные буквы при создании представления. Это похоже на обе версии MySQL, как клиент командной строки, так и клиент библиотеки PHP.
Я обнаружил один трюк, заключающийся в том, что если вы добавите GROUP BY к SELECT в представлении, он будет использовать заглавные буквы в вашем запросе во время выполнения. К сожалению, это мешает обновлению через представление, которое мне нужно.
Есть ли способ сделать так, чтобы заглавные буквы в имени столбца соответствовали запросу во время выполнения, что не требует возврата и изменения всего кода нашего приложения?