开发者社区> 问答> 正文

MySQL 数据库如何设置是否大小写敏感?


根据业务需要,用户对于数据库的库名、表名以及字符串字段的内容和查询是否区分大小写的需求有所不同。本文主要介绍如何设置 MySQL 数据库是否大小写敏感。

库名和表名的大小写敏感参数



参数说明


您可以通过设置 lower_case_table_names 的参数值,来确定是否要将库名和表名设置成大小写敏感。

参数名称默认值可选值作用
lower_case_table_names10、1、2确定库名和表名是否大小写敏感,与字符串比较大小写敏感无关。

参数取值说明:

  • 1:库名和表名不区分大小写,通常情况下这是兼容性最好的设置。

  • 0 :SQL 中对库名和表名需要严格区分大小写,否则会出现表不存在的错误。

  • 2 :创建的表和库依据语句上的格式存放,凡是查找都是转换为小写进行。


查看参数 lower_case_table_names 的全局设置


执行如下命令,查看参数 lower_case_table_names 的全局设置: show global variables like 'lower_case_tab%';


设置 lower_case_table_names 的值


目前,控制台上不提供 lower_case_table_names 的参数设置,系统会使用其默认值 1,即在默认情况下,数据库的库名和表名不区分大小写。如果您需要变更 ower_case_table_names 的值,请联系 阿里云售后技术支持,并授权给售后技术人员协助您修改该参数的值。

注意事项


在确定要变更该参数的值时,请先阅读如下注意事项:

  • 由于该参数是非标准操作,改为 0 后代表大小写敏感,之后该值不能再被改成 1 。例如,您在库名和表名区分大小写时创建了 t1 和 T1 两张表,若您再改回 1(大小写不敏感),t1 和 T1 就变成了名称一样的两张表,那时就会出现问题。

  • 修改为 0 后,SQL 语句需要严格区分大小写,请您充分了解该参数的影响,详情请参见文档 Server System Variables

  • 该参数在修改后需立即重启实例,请确保实例可以立即重启且尽量在业务低峰期进行该参数值的变更。


字符串字段的内容和查询大小写敏感设置


字符串字段的字符排序(collation)命名规则如下:

  • _bin: 表示的是 binary case sensitive collation,也就是说该排序规则区分大小写的。

  • _cs: case sensitive collation,区分大小写。

  • _ci: case insensitive collation,不区分大小写。


设置字符串比较区分大小写


  • 通过设置表字符排序规则(collation),使其为 binary 或 case sensitive。如下面的命令所示:create table case_bin_test (word VARCHAR(10)) CHARACTER SET latin1 COLLATE latin1_bin;


  • 通过设置列字符排序规则(collation),使其为 binary 或 case sensitive。如下面的命令所示:create table case_bin_test (word VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_cs);create table case_bin_test (word VARCHAR(10) CHARACTER SET latin1 binary);


  • 查询时指定字符排序规则(collation),其缺点是每次查询都要指定,可能导致性能问题,但比较灵活。如下面的命令所示:

    注意:在查询时,指定字符排序规则(collation)会导致查询计划忽略该字段上的索引,有可能会导致性能问题。 select * from case_bin_test where word collate latin1_bin like 'F%';
  • select * from case_bin_test where binary word like 'F%';



  • 返回结果如下图所示:


展开
收起
云栖大讲堂 2017-11-03 13:56:14 8524 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载

相关镜像