背景:由于项目开始时数据库设计经验不足,数据库名和部分数据表名都含有大写字母。但问题是,Linux上数据库名和表名是区分大小写的,而Windows上是不区分大小写的。结果就是在看本地的数据库的时候,对着写的代码是小写的表名,后来传到服务器上却发现报错,几经审查才发觉是表名的大小写不统一的问题。真是天坑啊,坑了自己也坑了小伙伴。怎么办呢?代码已经比较多了,不太可能一下子就把代码里面的表名都改过来。网上看到说设置 lower_case_table_names 可以使Linux上的数据库表名不区分大小写,那就试试吧。

ACTION1:直接修改服务器上 lower_case_table_names=1并重启 ,结果网站挂掉了,说找不到数据库!而本地通过MySQL-Front连接到服务器,显示有小写的 awzthink,但是点进去却说 "awzthink"数据库不存在 这样的话。第一次尝试失败,只能把配置先改回来,网站继续运行。

分析:这样看来,似乎代码本来用的大写awzThink和远程工具用的全小写awzthink都找不到那个数据库,那就想到直接把数据库名直接改为全小写。但是MySQL并没有提供修改数据库名的功能,所以只能新建数据库以及配置数据库用户,然后把所有数据表复制过去,再修改代码中的数据库配置。因为白天网站有一定流量,于是把这项任务安排是深夜。

ACTION2:是夜月黑风高,在服务器上把数据表复制到新的数据库中去,修改代码中的数据库配置(就只有一行),然后修改数据库自动备份脚本,上传。OK,网站运行正常,数据导出来查看也没有出入。再次尝试设置 lower_case_table_names=1并重启,结果那些有大写字母的表还是查询不出来,只好把此配置改回来。

分析:到这一步,数据库名已经改为小写,虽说对代码优化还是没什么帮助,但想要设置lower_case_table_names还是得必须经过这一步,就是必要不充分条件。对于为什么配置这个选项还是没有把传说中的大小写问题修好,还是要详细了解lower_case_table_names这个参数是做什么用的。

分析:后来百度搜索到ITEYE上的一篇博文,终于大概明白是怎么一回事。简单归纳就是:为0时(Linux默认),大小写敏感,创建和查询都是区分大小写;为1时,创建表以小写,查询表也是以小写;为2时,创建表区分大小写,查询表以小写。这样说的话应该就明白了,在Linux上如果本来是以有大写字母创建的表和数据库,如果后来配置设置为1或2时,那么就无论如何都查询不出来了。这个只对表名和数据库名,字段名是所有系统都区分大小写。所以解决办法是,修改表名为小写,然后设置lower_case_table_names=1并重启

ACTION3:再到凌晨,先截图保存现在的数据库表名,在网站低峰期修改表名为小写,再修改这个配置项,然后重启MySQL。注意修改表名到重启MySQL成功之前这一段时间,代码运行是会报错的。重启MySQL之后,网站就可以正常运行了。而代码中的SQL语句表名比较多而繁杂,可以对着截图以后慢慢改。

END:扫地完毕,小伙伴们可以安心地写MySQL了,不用再烦恼大小写问题了。对于原来代码中的大写表名,等闲一点再批量查找修改吧。

TIPS:最后提醒大家,数据库名和表名千万、千万、千万不要有大写。

附:修改lower_case_tables_names配置项的方法>>>

1、ROOT用户登录,vi /etc/my.cnf
2、找到 [mysqld],在里面加入一行 lower_case_table_names=1
3、重启数据库 service mysqld restart

MySQL大小写补坑记的更多相关文章

  1. 一步到位Linux中安装配置MySQL及补坑

    Windows上安装MySQL也就不讲了,基本上一路点击下一步就可完成,现在讲讲Linux上布署Mysql,虽然也有很多网友列出了详细的步骤,可能是因为版本过老的问题导致即使按照上面一步步来也还是出现 ...

  2. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  3. [转]Spark 踩坑记:数据库(Hbase+Mysql)

    https://cloud.tencent.com/developer/article/1004820 Spark 踩坑记:数据库(Hbase+Mysql) 前言 在使用Spark Streaming ...

  4. Spark踩坑记——数据库(Hbase+Mysql)转

    转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...

  5. SQL Labs刷题补坑记录(less1-less30)

    补坑加1,这几天快速刷一下sqllabs 来巩固下sql注入基础吧,也算是把很久以前没刷的过一遍,do it! 第一部分: LESS1: 直接报错,有回显的注入, http://localhost/s ...

  6. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  7. Spark踩坑记——共享变量

    [TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...

  8. Spark踩坑记——从RDD看集群调度

    [TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...

  9. 【转】Vue 脱坑记 - 查漏补缺(汇总下群里高频询问的xxx及给出不靠谱的解决方案)

    前言 文章内容覆盖范围,芝麻绿豆的破问题都有,不止于vue; 给出的是方案,但不是手把手一字一句的给你说十万个为什么! 有三类人不适合此篇文章: “喜欢站在道德制高点的圣母婊” – 适合去教堂 “无理 ...

随机推荐

  1. jQuery弹出关闭遮罩层

    效果体验:http://keleyi.com/keleyi/phtml/jquery/9.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...

  2. ["1", "2", "3"].map(parseInt)?

    ["1", "2", "3"].map(parseInt)得到什么? 答案是:[1, NaN, NaN]. 原因:parseInt接收的是两 ...

  3. 【小贴士】关于transitionEnd/animate的一个有趣故事

    前言 在很久之前,我们项目有一个动画功能,功能本身很简单,便是典型的右进左出,并且带动画功能 以当时来说,虽然很简单,但是受限于框架本身的难度,就直接使用了CSS3的方式完成了功能 当时主要使用tra ...

  4. ASP.NET MVC 简介

    1. ASP.NET MVC 是什么? ASP.NET MVC是微软官方提供的以MVC模式为基础的ASP.NET Web应用程序(Web Application)框架,它由Castle的MonoRai ...

  5. Group-buy项目总结

    这是我做的第一个移动端项目,和传统PC端网站不同的是,做移动端的网站要适配各种尺寸的设备. 在默认情况下,移动设备上的viewport都是要大于浏览器可视区域的,这是因为考虑到移动设备的分辨率相对于桌 ...

  6. Objective-C 关键字:retain, assgin, copy, readonly,atomic,nonatomic

    声明式属性的使用:声明式属性叫编译期语法 @property(retain,nonatomic)Some *s; @property(参数一,参数二)Some *s; 参数1:retain:修饰引用( ...

  7. 浅谈Bluetooth蓝牙开发

    前言:项目用到蓝牙开发,具体蓝牙获取硬件传感器中的数据. 因为没有蓝牙开发的相关经验,决定先了解一些蓝牙开发的知识,再去看之前同事写的蓝牙相关代码. ------------------------- ...

  8. popupwindow展示

    样式: layout: popup_appinfo.xml <?xml version="1.0" encoding="utf-8"?> <L ...

  9. 【开源】玩的就是开源 - DevFw

    http://www.cnblogs.com/newmin/ 最近真的爱上开源了,将自己7年积累下来的部分代码,发布成为一个项目:DevFw 项目如下: 项目名称 描述 仓库 AtNet.DevFw. ...

  10. #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie

    郑昀 创建于2014/10/30 最后更新于2014/10/31   一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...