如何设置MySQL的lower_case_table_names参数为1?
- 内容介绍
- 文章标签
- 相关推荐
前言:别再被大小写坑得满头大汗!
说真的, MySQL里那玩意儿 lower_case_table_names简直是“大小写的灵魂拷问”。有的同学把它当成装逼神器有的同学却主要原因是它在Linux上=0而每天抓狂。 搞一下... 今天 我就把这件事讲得像一锅乱炖——不求条理,只求情绪爆炸顺带扔进几段奇怪的代码和一张莫名其妙的产品对比表,让你读完后还能笑出声。
一、 先看看你到底是啥情况
打开终端,敲:

show variables like '%case%';
如果看到:
| Variable_name | Value |
|---|---|
| lower_case_table_names | 0 |
| lower_case_file_system | OFF |
恭喜,你现在正处在“大小写敏感模式”。这时候想改成=1 相当于 我怀疑... 给数据库装上了防弹眼镜——所有表名都强行变小写,不再区分大小写。
二、 先把“大写怪兽”全灭掉
别急着改参数,先把库里那些“高调”的大写表名统统干掉!否则重启后 你会看到类似:
ERROR 1146 : Table 'test.TABLE' doesn't exist
解决办法:
- 手动Rename:
RE不结盟E TABLE TestTable TO testtable; - 导出再导入:
先用
mysqldump --skip-lock-tables --no-data ... | tr 'A-Z' 'a-z'把DDL全转成小写,再重新施行。 - Pythonscript暴力改名:
下面这段神奇娱乐会遍历信息_schema, 把所有表名强制小写:
import pymysql conn = pymysql.connect cur = conn.cursor cur.execute") for db, tbl in cur.fetchall: new_tbl = tbl.lower cur.execute conn.commit
三、正式修改配置文件——不讲道理只讲感受!
# 关键一步:编辑 /etc/my.cnf
# 找到 段落, 如果没有就自己加一段
lower_case_table_names=1 # 把这里改成1
# 记得别忘了下面这句,主要原因是Linux默认是区分大小写
lower_case_file_system=OFF
挺好。 *注意*: 这个变量不能动态修改**,必须重启 MySQL 服务**才会生效。
四、血泪重启:让 MySQL 听见你的怒吼!
systemctl restart mysqld # 或者 service mysql restart
# 如果你是用 docker,就 exec 进去 kill -9 $ 再启动容器
# 有些老系统只能直接 /etc/init.d/mysqld restart
# 重启失败?检查日志 /var/log/mysqld.log 看看有没有 “Different lower_case_table_names settings” 报错
If you see:
Different lower_case_table_names settings for server and data dictionary .
Data Dictionary initialization failed.
四点血泪经验分享:
- #1: 一定要在初始化阶段就决定好这个值。
- #2: 如果已经跑起来了那就"删库跑路"。切记备份!⚠️
- #3: 不要在 Windows 上直接把它设为 2 再搬到 Linux —— 那叫一个“灾难”。
- #4: 千万别忘了把所有 .frm/.ibd/.myd/.myi 文件名字也改成小写,否则磁盘上仍然残留大写痕迹。
五、 随机插入的“产品对比表”——纯属噪音,请忽略!😜
| # 排名 | 产品名称 & 简介 | 价格 | |
|---|---|---|---|
| —— 数据库管理工具大比拼 —— | |||
| 1️⃣ | DBeaver | 免费 | |
| 2️⃣ | Squirrel SQL Client | ¥199/年 | |
| 3️⃣ | Aqua Data Studio | ¥3989/永久 | |
| 4️⃣ | Mysql Workbench | ||
| 5️⃣ | Navicat Premium | ¥1999 / 永久 | |
前言:别再被大小写坑得满头大汗!
说真的, MySQL里那玩意儿 lower_case_table_names简直是“大小写的灵魂拷问”。有的同学把它当成装逼神器有的同学却主要原因是它在Linux上=0而每天抓狂。 搞一下... 今天 我就把这件事讲得像一锅乱炖——不求条理,只求情绪爆炸顺带扔进几段奇怪的代码和一张莫名其妙的产品对比表,让你读完后还能笑出声。
一、 先看看你到底是啥情况
打开终端,敲:

show variables like '%case%';
如果看到:
| Variable_name | Value |
|---|---|
| lower_case_table_names | 0 |
| lower_case_file_system | OFF |
恭喜,你现在正处在“大小写敏感模式”。这时候想改成=1 相当于 我怀疑... 给数据库装上了防弹眼镜——所有表名都强行变小写,不再区分大小写。
二、 先把“大写怪兽”全灭掉
别急着改参数,先把库里那些“高调”的大写表名统统干掉!否则重启后 你会看到类似:
ERROR 1146 : Table 'test.TABLE' doesn't exist
解决办法:
- 手动Rename:
RE不结盟E TABLE TestTable TO testtable; - 导出再导入:
先用
mysqldump --skip-lock-tables --no-data ... | tr 'A-Z' 'a-z'把DDL全转成小写,再重新施行。 - Pythonscript暴力改名:
下面这段神奇娱乐会遍历信息_schema, 把所有表名强制小写:
import pymysql conn = pymysql.connect cur = conn.cursor cur.execute") for db, tbl in cur.fetchall: new_tbl = tbl.lower cur.execute conn.commit
三、正式修改配置文件——不讲道理只讲感受!
# 关键一步:编辑 /etc/my.cnf
# 找到 段落, 如果没有就自己加一段
lower_case_table_names=1 # 把这里改成1
# 记得别忘了下面这句,主要原因是Linux默认是区分大小写
lower_case_file_system=OFF
挺好。 *注意*: 这个变量不能动态修改**,必须重启 MySQL 服务**才会生效。
四、血泪重启:让 MySQL 听见你的怒吼!
systemctl restart mysqld # 或者 service mysql restart
# 如果你是用 docker,就 exec 进去 kill -9 $ 再启动容器
# 有些老系统只能直接 /etc/init.d/mysqld restart
# 重启失败?检查日志 /var/log/mysqld.log 看看有没有 “Different lower_case_table_names settings” 报错
If you see:
Different lower_case_table_names settings for server and data dictionary .
Data Dictionary initialization failed.
四点血泪经验分享:
- #1: 一定要在初始化阶段就决定好这个值。
- #2: 如果已经跑起来了那就"删库跑路"。切记备份!⚠️
- #3: 不要在 Windows 上直接把它设为 2 再搬到 Linux —— 那叫一个“灾难”。
- #4: 千万别忘了把所有 .frm/.ibd/.myd/.myi 文件名字也改成小写,否则磁盘上仍然残留大写痕迹。
五、 随机插入的“产品对比表”——纯属噪音,请忽略!😜
| # 排名 | 产品名称 & 简介 | 价格 | |
|---|---|---|---|
| —— 数据库管理工具大比拼 —— | |||
| 1️⃣ | DBeaver | 免费 | |
| 2️⃣ | Squirrel SQL Client | ¥199/年 | |
| 3️⃣ | Aqua Data Studio | ¥3989/永久 | |
| 4️⃣ | Mysql Workbench | ||
| 5️⃣ | Navicat Premium | ¥1999 / 永久 | |

