FAQ系列 | lower_case_table_names迷思

简介: FAQ系列 | lower_case_table_names迷思

导读

关于 lower_case_table_names 选项的设置的建议是怎样的呢?

问题由来

我个人认为,纠结于这个选项设置源于有些项目是从ORACLE或SQL Server迁移过来,在这两个数据库系统中,都无需关心数据表的大小写。而在MySQL中,默认是要区分大小写的(因为Unix/Linux文件系统是区分文件名大小写的),除非在windows系统下(windows系统是不区分大小写的)。

老叶的建议

我在公司制定的规范是要求默认设置 lower_case_table_names=0 的,也就是区分大小写。那么问题来了,如果是从ORACLE或SQL Server迁移到MYSQL的应用应该怎么处理呢?

我的建议是:

  • 首先,检查确认在应用程序中(或者抓取一段时间的请求日志),数据表名的写法是大写、小写还是混用,如果都是大写或者都是小写,那就更简单些了;
  • 其次,根据上面检查的结果,确定迁移到MySQL后统一使用大写还是小写(使用哪种规则的改动代价更小);
  • 最后,利用Linux下的awk\sed等工具,将包含数据表关键字的地方全部替换成第二部定义好的表名方案;

这样一来,就可以完成数据表名方案的切换了。

当然了,肯定有人(比如某领导、某PM,你懂得的,O(∩_∩)O哈哈~)会说全部修改表名风险太大,需要全面测试,但这个项目时间进度很紧张,希望能先上线。这种情况就没办法了,只能先设置 lower_case_table_names=1,然后迁移数据,优先保证项目的进度。

but,即便这时候,我们也建议数据表初始化时,统一采用大写或小写的表名,在项目的后续过程中,通过开启general log的方式,把所有请求SQL中使用的表名都记录下来,然后检查还有哪些和我们定义的规则不一样,再逐渐完善修改,最终达到最终目标。

写在最后

强烈建议在定义数据库设计规范时,统一采用全部都大写或全部都小写的数据表命名规则,没必要为了所谓的美观,弄出一堆大小写混合的表名,是在太操蛋了。

            </div>
相关文章
|
Linux
如何在Linux中挂起和恢复进程?
如何在Linux中挂起和恢复进程?
948 1
|
消息中间件 搜索推荐 Java
消息中间件JMS介绍、入门demo与spring整合
消息中间件JMS介绍、入门demo与spring整合
591 83
消息中间件JMS介绍、入门demo与spring整合
|
机器学习/深度学习 Web App开发 人工智能
全球名校AI课程库(8)| Berkeley伯克利 · 全栈深度学习训练营课程『Full Stack Deep Learnin』
课程以实战为主,讲解了不同场景下应用深度学习解决问题的工具、过程和方法:从问题理解,方法选择、数据管理、选择 GPU 到 Web 部署、监控和再训练。
2594 1
全球名校AI课程库(8)| Berkeley伯克利 · 全栈深度学习训练营课程『Full Stack Deep Learnin』
|
Web App开发 Dart 前端开发
Flutter 第一个程序Hello World!
Flutter 第一个程序Hello World!
496 1
Flutter 第一个程序Hello World!
|
Linux Windows
linux系统chmod指令修改文件权限没有效果的解决方法
linux系统chmod指令修改文件权限没有效果的解决方法
linux系统chmod指令修改文件权限没有效果的解决方法
|
JavaScript 安全 前端开发
Vue如何读取cookie实现路由守卫(检查用户登录状态)
一般实现路由守卫,判断用户的登录状态使用token和cookie验证两种方法,这次项目后端是给我提供的cookie验证,写到这里就记录一下,希望能帮助到你们
980 0
Vue如何读取cookie实现路由守卫(检查用户登录状态)
|
存储 SQL 监控
规则引擎 | 学习笔记
快速学习 规则引擎
1869 0
规则引擎 | 学习笔记
|
资源调度 JavaScript 前端开发
Vue3项目从0-1项目(手把手教学)
Vue3项目从0-1项目(手把手教学)
469 0
Vue3项目从0-1项目(手把手教学)
|
关系型数据库 MySQL 物联网
❤️Windows10环境下Docker安装主从MySQL5.7数据库❤️
❤️Windows10环境下Docker安装主从MySQL5.7数据库❤️
570 0
❤️Windows10环境下Docker安装主从MySQL5.7数据库❤️
|
存储 设计模式 算法
有限状态机FSM
关于状态机,以前写过[用Go实现一个状态机](https://mp.weixin.qq.com/s?__biz=MzUzNzAzMTc3MA==&mid=2247484850&idx=1&sn=5ba31ff066ddeeedab27f9ca9f1b9b58&scene=21#wechat_redirect),只是讲述了如何控制状态的流转,理论上不能算作完整的状态机。