mysql open rowset_mysql 8结果rowset案例有哪些变化?

MySQL8.0更新了INFORMATION_SCHEMA视图的实现,使用数据字典表来提高查询效率。然而,这导致查询结果中的列名变为大写,可能影响已有的查询。为解决这个问题,可以自定义列别名,或者习惯性以大写查询列名,或者将结果转换为非关联数组并按列号引用。
摘要由CSDN通过智能技术生成

MySQL 8.0确实改变了INFORMATION_SCHEMA中一些视图的实现:

Now that the metadata of all database tables is stored in transactional data dictionary tables, it enables us to design an INFORMATION_SCHEMA table as a database VIEW over the data dictionary tables. This eliminates costs such as the creation of temporary tables for each INFORMATION_SCHEMA query during execution on-the-fly, and also scanning file-system directories to find FRM files. It is also now possible to utilize the full power of the MySQL optimizer to prepare better query execution plans using indexes on data dictionary tables.

所以它有充分的理由,但我知道当你根据列名获取关联数组中的结果时,它会扰乱你的一些查询.

您可以看到视图的定义以大写形式显式声明列名:

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 |

+--------+

或者,您可以将结果提取到非关联数组中,并按列号而不是按名称引用列.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值