首页 文章

基于lower_case_table_names系统变量的SELECT对information_schema.routines的行为

提问于
浏览
1

这是我用来获取MySQL数据库中的存储过程列表的查询 .

SELECT `SPECIFIC_NAME` FROM `INFORMATION_SCHEMA`.`ROUTINES` WHERE `ROUTINE_SCHEMA` = 'database_name' COLLATE utf8_bin AND ROUTINE_TYPE = 'PROCEDURE';

我强制使用utf8_bin作为要使用的排序规则,以便在lower_case_table_names系统变量设置为0时获得正确的结果 .

但是如果lower_case_table_names设置为2并且数据库名称具有大写字符,则我将获得具有相同查询的空结果集 .

此外,如果在具有不区分大小写的文件名的系统上将lower_case_table_names设置为0,则会获得带有查询的空结果集 .

在这两种情况下,如果从查询中删除“COLLATE utf8_bin”或替换为“COLLATE utf8_general_ci”,我将获得正确的结果集 .

引自:http://dev.mysql.com/doc/refman/5.6/en/identifier-case-sensitivity.html

0表和数据库名称使用CREATE TABLE或CREATE DATABASE语句中指定的字母大小存储在磁盘上 . 名称比较区分大小写 . 如果在具有不区分大小写的文件名(例如Windows或Mac OS X)的系统上运行MySQL,则不应将此变量设置为0 . 如果在不区分大小写的文件系统上使用--lower-case-table-names = 0强制此变量为0并使用不同的字母表访问MyISAM表名,则可能会导致索引损坏 . 1表名称以小写形式存储在磁盘上,名称比较不区分大小写 . MySQL在存储和查找时将所有表名转换为小写 . 此行为也适用于数据库名称和表别名 . 2表和数据库名称使用CREATE TABLE或CREATE DATABASE语句中指定的字母大小存储在磁盘上,但MySQL在查找时将它们转换为小写 . 名称比较不区分大小写 . 这仅适用于不区分大小写的文件系统! InnoDB表名以小写形式存储,与lower_case_table_names = 1一样 .

如果lower_case_table_names设置为2

“MySQL在查找时将它们转换为小写”

这是什么意思?

我知道在Windows / OS X上不能将lower_case_table_names设置为0,但是我无法控制要运行查询的环境 .

但我发现这种行为很奇怪 .

INFORMATION_SCHEMA.EVENTS上的SELECT行为也相同 .

UPDATE

如果lower_case_table_names = 2,或者windows中的lower_case_table_names = 0,则INFORMATION_SCHEMA.ROUTINES表中ROUTINE_SCHEMA列中的值为小写 . 但是INFORMATION_SCHEMA.TABLES中的ROUTINE_SCHEMA列具有与创建数据库时使用的字母大小写相同的值 . 甚至SHOW DATABASES的结果集也具有与创建数据库时使用的相同字母大小写的值 . 为何如此差异?

1 回答

  • 1

    lower_case_table_names的值会影响两件事:

    • 用于存储在磁盘上的数据文件名称的lettercase;和

    • SQL命令中模式对象标识符的隐式转换 .

    您的问题是,在查询 INFORMATION_SCHEMA 时,唯一的架构对象标识符是对 INFORMATION_SCHEMA 本身的引用(在您的查询中, ROUTINES 表及其列名称) . 对模式对象的引用(例如 ROUTINE_SCHEMA 列中的值和 'database_name' 文字等)不是模式对象标识符,而是普通字符串(根据 lower_case_table_names 系统变量进行隐式字母转换) .

    因此,使用 lower_case_table_names = 2 ,您的数据库将使用 CREATE DATABASE 命令中使用的字母大写存储在磁盘(和 INFORMATION_SCHEMA )中 . 如果在查询 INFORMATION_SCHEMA 时使用区分大小写的排序规则,则查找将失败(除非您使用与创建数据库时使用的相同的字母大写) . 解决方案显然是使用不区分大小写的排序规则,例如 utf8_general_ci .

相关问题