MySQL大小写补坑记
背景:由于项目开始时数据库设计经验不足,数据库名和部分数据表名都含有大写字母。但问题是,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大小写补坑记的更多相关文章
- 一步到位Linux中安装配置MySQL及补坑
Windows上安装MySQL也就不讲了,基本上一路点击下一步就可完成,现在讲讲Linux上布署Mysql,虽然也有很多网友列出了详细的步骤,可能是因为版本过老的问题导致即使按照上面一步步来也还是出现 ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- [转]Spark 踩坑记:数据库(Hbase+Mysql)
https://cloud.tencent.com/developer/article/1004820 Spark 踩坑记:数据库(Hbase+Mysql) 前言 在使用Spark Streaming ...
- Spark踩坑记——数据库(Hbase+Mysql)转
转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...
- SQL Labs刷题补坑记录(less1-less30)
补坑加1,这几天快速刷一下sqllabs 来巩固下sql注入基础吧,也算是把很久以前没刷的过一遍,do it! 第一部分: LESS1: 直接报错,有回显的注入, http://localhost/s ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——共享变量
[TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...
- Spark踩坑记——从RDD看集群调度
[TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...
- 【转】Vue 脱坑记 - 查漏补缺(汇总下群里高频询问的xxx及给出不靠谱的解决方案)
前言 文章内容覆盖范围,芝麻绿豆的破问题都有,不止于vue; 给出的是方案,但不是手把手一字一句的给你说十万个为什么! 有三类人不适合此篇文章: “喜欢站在道德制高点的圣母婊” – 适合去教堂 “无理 ...
随机推荐
- jQuery弹出关闭遮罩层
效果体验:http://keleyi.com/keleyi/phtml/jquery/9.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...
- ["1", "2", "3"].map(parseInt)?
["1", "2", "3"].map(parseInt)得到什么? 答案是:[1, NaN, NaN]. 原因:parseInt接收的是两 ...
- 【小贴士】关于transitionEnd/animate的一个有趣故事
前言 在很久之前,我们项目有一个动画功能,功能本身很简单,便是典型的右进左出,并且带动画功能 以当时来说,虽然很简单,但是受限于框架本身的难度,就直接使用了CSS3的方式完成了功能 当时主要使用tra ...
- ASP.NET MVC 简介
1. ASP.NET MVC 是什么? ASP.NET MVC是微软官方提供的以MVC模式为基础的ASP.NET Web应用程序(Web Application)框架,它由Castle的MonoRai ...
- Group-buy项目总结
这是我做的第一个移动端项目,和传统PC端网站不同的是,做移动端的网站要适配各种尺寸的设备. 在默认情况下,移动设备上的viewport都是要大于浏览器可视区域的,这是因为考虑到移动设备的分辨率相对于桌 ...
- Objective-C 关键字:retain, assgin, copy, readonly,atomic,nonatomic
声明式属性的使用:声明式属性叫编译期语法 @property(retain,nonatomic)Some *s; @property(参数一,参数二)Some *s; 参数1:retain:修饰引用( ...
- 浅谈Bluetooth蓝牙开发
前言:项目用到蓝牙开发,具体蓝牙获取硬件传感器中的数据. 因为没有蓝牙开发的相关经验,决定先了解一些蓝牙开发的知识,再去看之前同事写的蓝牙相关代码. ------------------------- ...
- popupwindow展示
样式: layout: popup_appinfo.xml <?xml version="1.0" encoding="utf-8"?> <L ...
- 【开源】玩的就是开源 - DevFw
http://www.cnblogs.com/newmin/ 最近真的爱上开源了,将自己7年积累下来的部分代码,发布成为一个项目:DevFw 项目如下: 项目名称 描述 仓库 AtNet.DevFw. ...
- #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie
郑昀 创建于2014/10/30 最后更新于2014/10/31 一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...