Я в процессе обновления наших собственных приложений с 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 в представлении, оно будетиспользуйте заглавные буквы в вашем запросе во время выполнения.К сожалению, это нарушает обновление представления, в котором я нуждаюсь.
Есть ли способ сделать так, чтобы заглавные буквы имени столбца соответствовали запросу во время выполнения, что не предполагает возврата назад и изменения всего кода нашего приложения?