10bet网址
MySQL 5.7参考手册
相关文件10bet官方网站 下载本手册 从本手册中摘录

MySQL 5.7参考手册/....../ 使用Collat​​ion在Information_schema搜索中

10.8.7使用Information_Schema搜索中的排序规则

字符串列in.Information_Schema.表有一个融合UTF8_GENERAL_CI.,这是不区分大小写的。但是,对于对应于文件系统中表示的对象的值,例如数据库和表,搜索Information_Schema.字符串列可以区分大小写或不区分大小写,具体取决于底层文件系统的特征和值的特征dreame_case_table_names.系统变量。例如,如果文件系统区分大小写,则搜索可能是区分大小写的。本节介绍此行为以及如何在必要时修改它;另见bug#34921。

假设查询搜索schemata.schema_name.栏目测试数据库。在Linux上,文件系统区分大小写,所以比较schemata.schema_name.'测试'匹配,但比较'测试'不要:

mysql>从Information_schema.schemata中选择schema_name,其中schema_name ='test';+ ------------- + |schema_name |+ ------------- + |测试|+ ------------- + MySQL>从Information_schema.schemata中选择schema_name,其中schema_name ='test';空集(0.00秒)

这些结果发生在dreame_case_table_names.系统变量设置为0.更改值dreame_case_table_names.到1或2导致第二个查询返回相同的(非空)结果作为第一个查询。

在Windows或MacOS上,文件系统不区分大小写,因此比较匹配'测试''测试'

mysql>从Information_schema.schemata中选择schema_name,其中schema_name ='test';+ ------------- + |schema_name |+ ------------- + |测试|+ ------------- + MySQL>从Information_schema.schemata中选择schema_name,其中schema_name ='test';+ ------------- + |schema_name |+ ------------- + |测试| +-------------+

的价值dreame_case_table_names.在这种情况下没有区别。

出现前面的行为是因为UTF8_GENERAL_CI.整理不用于Information_Schema.搜索对应于文件系统中表示的对象的值时查询。它是文件系统扫描优化的结果Information_Schema.搜索。有关这些优化的信息,请参阅第8.2.3节“优化信息_Schema查询”

如果字符串操作的结果Information_Schema.列与期望不同,解决方法是使用明确的整理迫使迫使合适的整理(见第10.8.1节“在SQL陈述中使用Constate”)。例如,要执行不敏感的搜索,请使用整理与之Information_Schema.列名称:

MySQL>从Information_schema.schemata中选择架构架构_schemata,其中schema_name collat​​e utf8_general_ci ='test';+ ------------- + |schema_name |+ ------------- + |测试|+ ------------- + MySQL>从Information_schema.schemata中选择schema_name,其中schema_name collat​​e utf8_general_ci ='test';+ ------------- + |schema_name |+ ------------- + |测试| +-------------+

在前面的查询中,应用程序整理第四个案Information_Schema.列名称。申请整理比较值没有效果。

你也可以使用上()或者降低()功能:

上部(架构_Name)='test',其中leow(schema_name)='test'

虽然即使在具有区分大小写的文件系统的平台上也可以执行不区分大小写的比较,但如图所示,它不一定总是正确的事情。在此类平台上,可以具有多个对象,其中名称仅在LetterCase中不同。例如,表格命名城市城市, 和城市全部可以同时存在。考虑搜索是否应匹配所有此类名称或仅匹配一个并相应地编写查询。第一个比较(与UTF8_BIN.)区分大小写;其他人不是:

table_name collat​​e utf8_bin ='city',其中table_name collat​​ate utf8_general_ci ='city',其中up​​per(table_name)='city',其中dower(table_name)='city'

搜索Information_Schema.用于参考值的字符串列Information_Schema.本身确实使用了UTF8_GENERAL_CI.整理,因为Information_Schema.是A.虚拟的数据库未在文件系统中表示。例如,比较schemata.schema_name.比赛'Information_schema'或者'Information_schema'无论平台如何:

MySQL>从Information_schema.schemata中选择schema_name,其中schema_name ='Information_schema';+ ------------------- + |schema_name |+ ------------------- + |Information_Schema |+ ------------------ + MySQL>从Information_schema.schemata中选择schema_name,其中schema_name ='Information_schema';+ ------------------- + |schema_name |+ ------------------- + |Information_Schema | +--------------------+