MySQL 8.0は、INFORMATION_SCHEMAの一部のビューの実装を変更しました:
https://mysqlserverteam.com/mysql-8-0-improvements- to-information_schema / 言う:
したがって、これは正当な理由で行われていますが、列名に基づいて連想配列で結果をフェッチすると、クエリの一部が混乱することを理解しています。
ビューの定義が列名を大文字で明示的に宣言していることがわかります:
mysql 8.0.14> SHOW CREATE VIEW CHARACTER_SETS\G
*************************** 1. row ***************************
View: CHARACTER_SETS
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`mysql.infoschema`@`localhost` SQL SECURITY DEFINER VIEW `CHARACTER_SETS` AS
select
`cs`.`name` AS `CHARACTER_SET_NAME`,
`col`.`name` AS `DEFAULT_COLLATE_NAME`,
`cs`.`comment` AS `DESCRIPTION`,
`cs`.`mb_max_length` AS `MAXLEN` -- delimited column explicitly uppercase
from (`mysql`.`character_sets` `cs`
join `mysql`.`collations` `col` on((`cs`.`default_collation_id` = `col`.`id`)))
character_set_client: utf8
collation_connection: utf8_general_ci
いくつかの方法で変更を回避できます。
ビューをクエリするときに、必要に応じて独自の列エイリアスを宣言できます。
mysql 8.0.14> SELECT MAXLEN AS `maxlen`
FROM `information_schema`.`CHARACTER_SETS` LIMIT 2;
+--------+
| maxlen |
+--------+
| 2 |
| 1 |
+--------+
8.0より前では、列を大文字で照会する習慣を始めることができます。これが私の5.7サンドボックスでの結果を示すテストです:
mysql 5.7.24> SELECT MAXLEN
FROM `information_schema`.`CHARACTER_SETS` LIMIT 2;
+--------+
| MAXLEN |
+--------+
| 2 |
| 1 |
+--------+
または、結果を非連想配列にフェッチし、名前ではなく列番号で列を参照することもできます。