在linux系统中,mysql的表名默认是区分大小写的,但这并不是绝对的,实际行为由系统变量lower_case_table_names控制。很多从windows迁移到linux的项目,会因为表名大小写问题出现找不到表的错误,所以搞清楚这个机制很有必要。

lower_case_table_names参数说明
mysql通过lower_case_table_names来决定表名和数据库名在磁盘上的存储方式以及比较时的规则。该参数可以在mysql配置文件my.cnf中设置,并在服务启动时生效。
| 取值 | 含义 | 适用系统 |
|---|---|---|
| 0 | 表名按指定大小写存储,比较时区分大小写(linux默认) | linux |
| 1 | 表名以小写形式存储,比较时不区分大小写 | windows默认,linux可设 |
| 2 | 表名按指定大小写存储,但比较时转为小写后比较 | macOS默认 |
linux下查看当前设置
可以登录mysql后执行如下语句查看当前的值:
-- 查看表名大小写敏感设置 SHOW VARIABLES LIKE 'lower_case_table_names';
如何修改让linux中mysql表名不区分大小写
如果你希望linux下的mysql表名不区分大小写,需要将lower_case_table_names设为1。修改步骤如下:
1. 停止mysql服务
sudo systemctl stop mysqld
2. 修改配置文件
在/etc/my.cnf的[mysqld]区块下增加一行:
[mysqld] lower_case_table_names=1
3. 处理已有表
如果数据库中已经存在大写表名,直接改配置重启可能导致表不可访问。正确做法是先导出数据,清空数据目录中相关表,再启动并设置好参数后导入。简单示例如下:
# 导出所有表结构及数据 mysqldump -uroot -p --all-databases > alldb.sql # 修改配置并启动后重新导入 mysql -uroot -p < alldb.sql
开发中的注意事项
- 项目在windows开发、linux部署时,建议统一使用小写表名,减少环境差异。
- 修改lower_case_table_names属于服务器级变更,必须在停服状态下调整。
- 使用ORM框架时,注意其自动建表策略生成的表名大小写规则。
注意:在linux中将lower_case_table_names从0改为1后,原有大写表名在文件系统上仍是混合大小写,mysql可能将其识别为不同表,因此务必做好备份与导出导入。
总结来说,linux中mysql表名默认区分大小写,但通过配置lower_case_table_names=1可以改为不区分。理解该参数并在项目初期规范命名,能避免很多不必要的麻烦。
linuxmysqltable_name_case_sensitivity修改时间:2026-07-29 04:54:18