是什么在MySQL 8结果行集中情况的变化?

问题描述 投票:-1回答:2

运行时

SELECT maxlen FROM `information_schema`.`CHARACTER_SETS`;

MySQL的5.7和MySQL 8产生不同的结果:

  • 在MySQL 5.7,结果列名称下套管,
  • 在MySQL 8中的结果行名称上套管。

NB:在qazxsw poi的表中,列名是qazxsw POI(上部套管)。

因为我无法找到一个资源记录吧,我的问题是:

是什么在MySQL 8结果行集中情况的变化?

mysql case-sensitive mysql-8.0
2个回答
1
投票

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

或者你可以通过列数,而不是按名称撷取结果到非关联数组,并参考列。


1
投票

存在的情况下的灵敏度没有变化。如果检查标识区分大小写,无论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 | +--------+ 说,字段名不区分大小写:

列,索引,存储程序,事件,资源组的名称是不区分大小写的任何平台上,也不是列别名。

对我来说,这似乎更像是一个显示差异。

© www.soinside.com 2019 - 2024. All rights reserved.