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的客户端和服务端协议
May 10 MySQL
MySQL如何构建数据表索引
May 13 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
MySQL完整性约束的定义与实例教程
May 30 MySQL
MySQL系列之七 MySQL存储引擎
Jul 02 MySQL
一篇文章带你深入了解Mysql触发器
Aug 02 MySQL
MySQL配置主从服务器(一主多从)
Aug 07 MySQL
Mysql binlog日志文件过大的解决
Oct 05 MySQL
防止web项目中的SQL注入
Dec 06 MySQL
MySQL时区造成时差问题
Apr 13 MySQL
MYSQL常用函数介绍
May 05 MySQL
MySQL 语句执行顺序举例解析
Jun 05 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文件缓存smarty模板应用实例分析
2016/02/26 PHP
PHP+MySQL存储数据常见中文乱码问题小结
2016/06/13 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
2019/10/17 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
js实现跨域的几种方法汇总(图片ping、JSONP和CORS)
2015/10/25 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python压缩和解压缩zip文件
2015/02/14 Python
python文件的md5加密方法
2016/04/06 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
django 发送手机验证码的示例代码
2018/04/25 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
运动会广播稿100字
2014/01/11 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
法学专业求职信
2014/07/15 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
办公室岗位职责范本
2015/04/11 职场文书