Использование заглавных букв в имени столбца представления MySQL

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

Есть ли способ сделать так, чтобы заглавные буквы в имени столбца соответствовали запросу во время выполнения, что не требует возврата и изменения всего кода нашего приложения?

7
задан mmalone 19 July 2011 в 15:57
поделиться