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 05 MySQL
mysql优化
Apr 06 MySQL
mysql的MVCC多版本并发控制的实现
Apr 14 MySQL
MySQL如何构建数据表索引
May 13 MySQL
MySQL系列之三 基础篇
Jul 02 MySQL
mysql主从复制的实现步骤
Oct 24 MySQL
分享mysql的current_timestamp小坑及解决
Nov 27 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
mysql使用instr达到in(字符串)的效果
Apr 03 MySQL
MySQL普通表如何转换成分区表
May 30 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中this,self,parent的区别详解
2013/06/08 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
JS验证不重复验证码
2017/02/10 Javascript
JS查找英文文章中出现频率最高的单词
2017/03/20 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
JS写滑稽笑脸运动效果
2020/05/28 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
python实现中文转换url编码的方法
2016/06/14 Python
Python代码解决RenderView窗口not found问题
2016/08/28 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
Linux面试题LINUX系统类
2015/11/25 面试题
线程同步的方法
2016/11/23 面试题
六十岁生日答谢词
2014/01/10 职场文书
大学生志愿者感言
2014/01/15 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
休假证明书
2015/06/24 职场文书
银行服务理念口号
2015/12/25 职场文书
致毕业季:你如何做好自己的职业生涯规划书?
2019/07/01 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书