mysql区分大小写吗 {#articleContentId}
在windows下默认是不区分大小写的,在linux下默认是区分大小写的。
所以,为了避免出问题,许多公司的数据库编程规范中明确规定:库名、表名、列名、索引名一律小写,不同单词之间以下划线分割,且控制在32个字符以内。
mysql中的数据表是大小写不敏感的,这意味着在查询时不会区分大小写。但是,在某些情况下,我们需要mysql区分大小写,这时需要进行相应的设置。本文将介绍mysql如何设置区分大小写。
一、MySQL大小写区分的原理
在MySQL中,名称仅被视为字符,而不是语言的一个单词或短语。因此,MySQL不使用大小写来确定名称的区别。例如,MySQL将"table1"和"Table1"视为相同的名称。
二、设置MySQL区分大小写
- 在my.cnf配置文件中进行设置
打开my.cnf配置文件,如果不存在,则创建一个新文件。在文件中添加以下代码:
[mysqld]
lower_case_table_names=1
保存文件并重启MySQL服务器。通过将lower_case_table_names设置为1,可以使MySQL强制区分大小写。如果将其设置为0,则MySQL将不区分大小写,默认值为0。
2在命令行中进行设置
全局修改
对于没有权限修改MySQL配置文件的用户,可以在MySQL命令行中设置。在命令行中使用以下命令:
SET GLOBAL lower_case_table_names=1;
这会将在MySQL服务器的全局范围内将lower_case_table_names参数设置为1。这种设置将在MySQL服务器重新启动后继续保持。
临时修改
也可以使用以下命令在当前会话中设置:
SET SESSION lower_case_table_names=1;
这将在当前会话中将lower_case_table_names参数设置为1。此设置将在当前会话结束时失效。
三、注意事项
- 使用lower_case_table_names=1参数会使敏感的表名大小写被转换为小写。如果两个表具有相同的名称但用不同的大小写方式书写,则当lower_case_table_names=1时,这些表将变成同一个表。因此,使用该参数时需要小心选择表名。
- 在使用lower_case_table_names=1的情况下,无法使用大小写敏感的非二进制排序或查找规则,例如,utf8_bin。这是因为,lower_case_table_names=1会把所有字符转换为小写,这会导致大小写敏感的排序或查找规则不起作用。
- 在使用lower_case_table_names=1的情况下,大小写敏感的字符集特征不可用。例如,在latin1_cs或utf8_cs字符集中,cs表示大小写敏感,但是lower_case_table_names=1会强制将所有字符转换为小写,因此大小写敏感规则将不起作用。
四、总结
MySQL数据库的默认设置是不区分大小写的。但是,当需要在查询时区分大小写时,可以在my.cnf配置文件中将lower_case_table_names设置为1,或者在MySQL命令行中使用SET语句进行设置。但需要注意的是,使用lower_case_table_names=1有一些限制,如果不小心选择表名或字符集,可能会导致一些问题。因此,需要谨慎使用。
{#more-17932}
1-windows 下 配置小写为主
例如,在windows下,mysql的配置文件my.ini中默认配置
lower_case_table_names=1,
表名、表别名、库名在磁盘上以小写存储;
比较是大小写不敏感的;
在查询的时候,mysql将表名、表别名、库名先转换为小写然后再查询:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/panghuangang/article/details/134734124
通过将lower_case_table_names设置为1,可以使MySQL强制区分大小写。如果将其设置为0,则MySQL将不区分大小写,默认值为0。