MySQL大小写敏感的注意事项


Posted in MySQL onMay 24, 2021

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

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

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

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大小写敏感的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
MySQL 慢查询日志深入理解
Apr 22 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
安装配置mysql及Navicat prenium的详细流程
Jun 10 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 MySQL
Mysql中where与on的区别及何时使用详析
Aug 04 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
Oct 15 MySQL
mysql sum(if())和count(if())的用法说明
Jan 18 MySQL
MySQL 开窗函数
Feb 15 MySQL
MySQL学习必备条件查询数据
Mar 25 MySQL
SQL Server数据库的三种创建方法汇总
May 08 MySQL
MySQL 使用事件(Events)完成计划任务
May 24 #MySQL
MySQL触发器的使用
May 24 #MySQL
MySQL 重命名表的操作方法及注意事项
May 21 #MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 #MySQL
MySQL官方导出工具mysqlpump的使用
May 21 #MySQL
新手必备之MySQL msi版本下载安装图文详细教程
MySQL数据库压缩版本安装与配置详细教程
You might like
探讨:如何编写PHP扩展
2013/06/13 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
浅谈json_encode用法
2015/03/05 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
jQuery对象与DOM对象转换方法详解
2016/05/10 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
Easyui使用Dialog行内按钮布局的实例
2017/07/27 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
Angular8基础应用之表单及其验证
2019/08/11 Javascript
python选择排序算法的实现代码
2013/11/21 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
自我评价200字分享
2013/12/17 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
运动会加油稿20字
2014/11/15 职场文书
外出培训学习心得体会
2016/01/18 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers