MySQL大小写敏感的注意事项

 更新时间:2021年05月24日 10:11:28   作者:尹洪亮Kevin  
MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。如果你稍加不注意就会出现在本机开发的程序运行一切正常,发布到服务器行就出现表名找不到的问题,一头雾水。

由于这个原因,在阿里巴巴规约中这样要求:

【强制】表名、字段名必须使用小写字母或数字 , 禁止出现数字开头,禁止两个下划线中间只 出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。

因此,数据库名、 表名、字段名,都不允许出现任何大写字母,避免引起不必要的麻烦。

MySQL的大小写敏感是由参数控制的

mysql大小写敏感配置相关的两个参数,lower_case_file_system 和 lower_case_table_names。

查看当前mysql的大小写敏感配置,可以使用如下语句

show global variables like '%lower_case%';

+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | ON    |
| lower_case_table_names | 0     |
+------------------------+-------+

参数说明如下:

1.lower_case_file_system,代表当前系统文件是否大小写敏感,只读参数,无法修改。ON 大小写不敏感,OFF 大小写敏感。

  • 此变量描述数据所在的操作系统的文件目录是否区分大小写。 OFF表示文件名区分大小写,ON表示它们不区分大小写。此变量是只读的,因为它反映了文件系统的属性,设置它对文件系统没有影响。

2.lower_case_table_names,代表表名是否大小写敏感,可以修改,参数有0、1、2三种。

  • 0 大小写敏感。(Unix,Linux默认) 创建的库表将原样保存在磁盘上。如create database TeSt;将会创建一个TeSt的目录,create table AbCCC …将会原样生成AbCCC.frm文件,SQL语句也会原样解析。
  • 1 大小写不敏感。(Windows默认) 创建的库表时,MySQL将所有的库表名转换成小写存储在磁盘上。 SQL语句同样会将库表名转换成小写。 如需要查询以前创建的Testtable(生成Testtable.frm文件),即便执行select * from Testtable,也会被转换成select * from testtable,致使报错表不存在。
  • 2 大小写不敏感(OS X默认) 创建的库表将原样保存在磁盘上, 但SQL语句将库表名转换成小写。

MySQL大小写敏感如何设置

在Linux系统中修改my.cnf文件,在Windows下修改my.ini文件,新增或修改以下内容。

lower_case_table_names = 0 或 lower_case_table_names = 1

然后重启MySQL服务才可以生效。

开发注意事项

  • 如果要将lower_case_table_names从0(敏感)修改为1(不敏感)时,必须先对旧数据表的表名进行处理,把所有数据库的表名先改为小写,最后再设置lower_case_table_names为1,否则依然会出现无法找到表名的问题。
  • 在Windows上lower_case_table_names默认值为1(不敏感),在macOS上默认值为2(不敏感)。在Linux上不支持值2,服务器强制该值为0(敏感)。
  • 并且MySQL官方也提示说:如果在数据目录驻留在不区分大小写的文件系统(例如Windows或macOS)上,则不应将lower_case_table_names设置为0。
  • 否则将出现MySQL服务无法启动的问题。

总结

由于操作系统不同导致大小写敏感的默认设置不一致,我们在开发时一定要注意,应该养成严格的意识,SQL语句一律采用小写字母,避免无意义的踩坑。

以上就是MySQL大小写敏感的注意事项的详细内容,更多关于MySQL大小写敏感的资料请关注脚本之家其它相关文章!

相关文章

  • windows下Mysql多实例部署的操作方法

    windows下Mysql多实例部署的操作方法

    这篇文章主要介绍了windows下Mysql多实例部署,需要部署Mysql多个实例,原理很简单,多个mysql服务运行使用不同的配置及数据管理,需要的朋友可以参考下
    2022-09-09
  • MySQL高级查询示例详细介绍

    MySQL高级查询示例详细介绍

    这篇文章主要介绍了MySQL高级查询示例,在面试过程中经常会遇到sq查询问题,今天小编通过本文给大家介绍下MySQL高级查询语法分析,感兴趣的朋友跟随小编一起看看吧
    2023-02-02
  • Navicat中新建MySQL数据库与新建、修改、删除数据表及删除数据库详细操作方法

    Navicat中新建MySQL数据库与新建、修改、删除数据表及删除数据库详细操作方法

    Navicat是一套快速、可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设,这篇文章主要给大家介绍了关于Navicat中新建MySQL数据库与新建、修改、删除数据表及删除数据库详细操作的相关资料,需要的朋友可以参考下
    2023-11-11
  • mysql数据库忘记管理员密码的解决方法

    mysql数据库忘记管理员密码的解决方法

    我们在Windows操作系统下编程会使用到MySQL数据库。但是有时,我们会忘记数据库的登录密码?当我们忘记了登录密码,无法进入mysql时,该怎么办呢?这里我们提供mysql的登录秘密的修改
    2018-02-02
  • 深入浅出的学习Mysql

    深入浅出的学习Mysql

    最近看了一本小书,网易技术部的《深入浅出MySQL数据库开发、优化与管理维护》,算是回顾一下mysql基础知识。下面这篇文章主要介绍了学习Mysql的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • 一次现场mysql重复记录数据的排查处理实战记录

    一次现场mysql重复记录数据的排查处理实战记录

    这篇文章主要给大家介绍了一次现场mysql重复记录数据的排查处理记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-10-10
  • MySql三种避免重复插入数据的方法

    MySql三种避免重复插入数据的方法

    这篇文章主要介绍了MySql三种避免重复插入数据的方法,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • 对比MySQL中int、char以及varchar的性能

    对比MySQL中int、char以及varchar的性能

    在本篇文章中我们给大家分享了关于MySQL中int、char以及varchar的性能对比的相关内容,有兴趣的朋友们学习下。
    2018-10-10
  • MySQL外键关联操作的实现

    MySQL外键关联操作的实现

    本文主要介绍了MySQL外键关联操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • mysql无法启动服务及其他问题总结

    mysql无法启动服务及其他问题总结

    MySQL无法启动,可能有多种原因导致,本文主要介绍了mysql无法启动服务及其他问题总结,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01

最新评论