运行时
SELECT maxlen FROM `information_schema`.`CHARACTER_SETS`;
MySQL的5.7和MySQL 8产生不同的结果:
NB:在qazxsw poi的表中,列名是qazxsw POI(上部套管)。
因为我无法找到一个资源记录吧,我的问题是:
是什么在MySQL 8结果行集中情况的变化?
MySQL的8.0确实改变在INFORMATION_SCHEMA一些实施意见:
CHARACTER_SETS
说:
现在,所有的数据库表的元数据存储在交易数据字典表,它使我们能够设计一个INFORMATION_SCHEMA表的数据库视图在数据字典表。这对即时执行过程中消除了成本,如创建每个INFORMATION_SCHEMA查询的临时表,并且还扫描文件系统的目录来寻找FRM文件。这也是现在可以利用MySQL优化的全部力量准备使用的数据字典表的索引更好的查询执行计划。
因此,它被做了充分的理由,但我明白,当你在获取基于列名关联数组结果已经打乱你的一些查询。
你可以看到视图的定义以大写显式声明的列名:
MAXLEN
您可以解决在几个方面的变化:
当你查询视图可以在需要的情况下,声明自己的列别名:
https://mysqlserverteam.com/mysql-8-0-improvements-to-information_schema/
你可以在开始之前8.0大写查询列的习惯。下面是显示我的5.7沙盒结果的测试:
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 |
+--------+
MySQL文档和mysql 5.7.24> SELECT MAXLEN
FROM `information_schema`.`CHARACTER_SETS` LIMIT 2;
+--------+
| MAXLEN |
+--------+
| 2 |
| 1 |
+--------+
说,字段名不区分大小写:
列,索引,存储程序,事件,资源组的名称是不区分大小写的任何平台上,也不是列别名。
对我来说,这似乎更像是一个显示差异。