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服务添加 iptables防火墙策略的方案
Apr 29 MySQL
超详细教你怎么升级Mysql的版本
May 19 MySQL
MySQL 全文索引使用指南
May 25 MySQL
Mysql数据库索引面试题(程序员基础技能)
May 31 MySQL
SQL之各种join小结详细讲解
Aug 04 MySQL
MySQL中的引号和反引号的区别与用法详解
Oct 24 MySQL
SQL基础的查询语句
Nov 11 MySQL
教你如何让spark sql写mysql的时候支持update操作
Feb 15 MySQL
MySQL读取JSON转换的方式
Mar 18 MySQL
MySQL数据库事务的四大特性
Apr 20 MySQL
详解Mysql事务并发(脏读、不可重复读、幻读)
Apr 29 MySQL
Mysql 一主多从的部署
May 20 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地址引用(php地址引用的效率问题)
2012/03/23 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
javascript document.referrer 用法
2009/04/30 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
jQuery事件对象总结
2016/10/17 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
vue多层嵌套路由实例分析
2019/03/19 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python使用装饰器进行django开发实例代码
2018/02/06 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
如何理解Python中包的引入
2020/05/29 Python
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
介绍一下mysql的日期和时间函数
2013/03/28 面试题
写自荐信的七个技巧
2013/10/15 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
服务行业口号
2014/06/11 职场文书
获奖感言怎么写
2015/07/31 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python