背景:由于项目开始时数据库设计经验不足,数据库名和部分数据表名都含有大写字母。但问题是,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. HTML5学习之 开发工具

    Notepad++.Editplus 是常用的开发编辑器.这些在Window系统下,比较容易找到,但是在MAC系统下,有的是收费的,有的是不支持.我开发的时候,用的是TextWrangler,如图: ...

  2. iOS 真机测试 App installation failed

    真机测试的过程中,出现这种Bug This application's application-identifier entitlement does not match that of the in ...

  3. IBM实习

    来到北京,进入IBM实习已经好多天了,两个月的暑假,两个月夏日在这里度过了,并将在未来个一个月里面,仍将在这里走过,但是我却一无所成,现在仍然只在徘徊中游走,丹迪什么时候能真正懂得实习的难得可贵,懂得 ...

  4. ArcGIS API for Silverlight 使用GeometryService求解线与线的交点

    ///画线 void btn_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Button btn = sender as B ...

  5. 从头开始构建LINUX [LFS]

    “LINUX就是这个范”有一章专门介绍了Linux的构建,过程详细,很有意思.结合这方面的资料简要汇集一下 LFS 这个站点提供了从源代码构建一个Linux的详细步骤 书 http://archive ...

  6. iOS之微信支付

    前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码.包你也学会了微信支付.而且支付也是面试常问的内容. 正文: 1.首先在开始使用微信支付之前,有一些东西是开发者必须要 ...

  7. windows server2012 R2 本地策略编辑

    进入本地策略编辑器: 1.win + R 2.输入命令行:gpedit.msc 密码期限设置: 1.windows设置 2.安全设置 3.账户策略 4.密码策略 5.密码最长使用期限 赋值 0 交互登 ...

  8. Django框架使用一 基本介绍,安装和建项篇

    Django概述 Django 是在快节奏的编辑环境中开发的,设计使得常见 Web 开发任务快速且容易;它可以编写一个数据驱动的Web应用程序,简单的说就是不需要开发者操作数据库. 设计数据模型 尽管 ...

  9. active_record的不定时更新

    1 valid?方法只是校验所有的校验条件,如果规则A仅加在数据库上,而不是model上,是不对校验起作用的,最后提交时虽然校验成功,但仍然会抛异常.比如数据库中增加了非空的规则,但模型上没有pres ...

  10. RHEL 6.6安装桌面环境GNOME

    在测试服务器(Red Hat Enterprise Linux Server release 6.6)需要安装桌面系统环境,于是选择GNOME桌面环境安装. 一:检查系统的运行级别以及是否安装了桌面环 ...