MySQL表名大小写敏感由lower_case_table_names系统变量决定Linux默认0区分、Windows为1不区分、macOS为2创建转小写、比较不区分修改需初始化时设置或清空datadir后重启线上库不可热改开发应统一用小写表名并显式加反引号。MySQL 表名大小写敏感由什么决定直接看 lower_case_table_names 系统变量它不是“开关”而是定义表名在磁盘和内存中如何存储与比较的策略。Linux 默认值是 0区分大小写Windows 是 1不区分macOS 是 2创建时转小写比较时不区分。你改配置前必须确认当前 OS 和 MySQL 启动方式——Docker 容器里改了 my.cnf 却没挂载生效或者 systemd 启动时绕过了配置文件都会白忙。修改 lower_case_table_names 的实操前提这个值只能在初始化 MySQL 实例时设置或在**完全清空数据目录后重启实例**才安全生效。线上库不能热改设成 1 后再建表 user旧表 User 仍存在但 MySQL 会拒绝访问报错 Table db.User doesnt exist因为内部元数据已按小写注册而磁盘上文件名还是大写。必须停服删掉 datadir 下所有文件包括 ibdata1、ib_logfile*、数据库子目录在 my.cnf 的 [mysqld] 段写明 lower_case_table_names1用 mysqld --initialize 重建系统表再启动应用需重新导出/导入数据mysqldump 输出的 SQL 中表名保持原样导入时由新规则统一处理不改配置时怎么避免踩坑开发阶段就统一用小写表名是最省事的方案。很多 ORM如 Laravel Eloquent、Django ORM默认生成小写蛇形命名但如果你手写 SQL 或用旧脚本容易混用 UserInfo 和 userinfo。MySQL 5.7 在 Linux 上执行 SELECT * FROM UserInfo; 可能成功但换到 Windows 部署就报错——不是语法错而是 Table db.UserInfo doesnt exist因为磁盘上实际是 userinfo.frm。 There’s An AI For That 全球领先的 AI 聚合器收集10,225个AI工具可用于超过2,548个任务。