mysql数据库表名区分大小写问题_调整lower_case_table_names

张开发
2026/4/18 23:52:22 15 分钟阅读

分享文章

mysql数据库表名区分大小写问题_调整lower_case_table_names
MySQL表名大小写敏感由lower_case_table_names变量决定Linux默认0区分macOS/Windows默认1不区分该值启动时读取且不可动态修改改为1需重命名文件、清理元数据并重启。MySQL 表名大小写敏感的根本原因在哪表名是否区分大小写完全由 lower_case_table_names 系统变量控制和操作系统无关——但它的默认值又恰恰依赖操作系统。Linux 默认是 0区分大小写macOS默认用 APFS和 Windows 默认是 1不区分自动转小写。这不是 bug是 MySQL 故意设计的兼容策略。关键点在于这个变量是**启动时读取的运行中不可修改**改了要重启 mysqld且一旦设为 1所有新创建的表名都会被强制转成小写存入磁盘后续用大写查会失败即使 SQL 里写了 SELECT * FROM User。如何安全地把 lower_case_table_names 从 0 改成 1不能直接改配置重启——已有表名含大写字母时MySQL 启动会报错Table xxx doesnt exist因为磁盘上文件名是 User.frm但 MySQL 按 user.frm 去找。先用 mysqldump 导出全部数据库确保导出语句里的表名是实际大小写别加 --skip-extended-insert 导致换行混乱停库修改 my.cnf在 [mysqld] 下添加 lower_case_table_names1手动重命名数据目录下的所有表文件把 .frm、.ibd 文件名全转成小写例如 User.frm → user.frm清空 mysql 系统库中的 tables、columns 等表里残留的大写表名记录更稳妥做法是删掉整个 mysql 目录并用 mysqld --initialize 重建再导入权限重启再用 source 导入 dump 文件lower_case_table_names2 在 macOS 上为什么危险2 表示“存储用原大小写比较时不区分”听起来灵活但实际埋雷 唱鸭 音乐创作全流程的AI自动作曲工具集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

更多文章