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' doesn't exist),因为内部元数据已按小写注册,而磁盘上文件名还是大写。必须停服,删掉 datadir 下所有文件(包括 ibdata1、ib_logfile*、数据库子目录)在 my.cnf 的 [mysqld] 段写明 lower_case_table_names=1用 mysqld --initialize 重建系统表,再启动应用需重新导出/导入数据(mysqldump 输出的 SQL 中表名保持原样,导入时由新规则统一处理)不改配置时怎么避免踩坑开发阶段就统一用小写表名,是最省事的方案。很多 ORM(如 Laravel Eloquent、Django ORM)默认生成小写蛇形命名,但如果你手写 SQL 或用旧脚本,容易混用 UserInfo 和 userinfo。MySQL 5.7+ 在 Linux 上执行 SELECT * FROM UserInfo; 可能成功,但换到 Windows 部署就报错------不是语法错,而是 Table 'db.UserInfo' doesn't exist,因为磁盘上实际是 userinfo.frm。 There's An AI For That 全球领先的 AI 聚合器,收集10,225个AI工具,可用于超过2,548个任务。
相关推荐
m0_674294642 小时前
TensorFlow如何监控内存使用情况_结合tf.summary记录关键指标信息一 乐2 小时前
房产租赁管理|基于springboot + vue房产租赁管理系统(源码+数据库+文档)2301_815279522 小时前
c++ 游戏性能分析telemetry c++如何设计一个遥测系统2301_764150562 小时前
HTML图片怎么用UnoCSS对齐_UnoCSS原子化CSS图片对齐实战.txtCappuccinoRose2 小时前
数据库安全性与完整性 - 软考备战(三十三)2401_883600252 小时前
SQL处理分组聚合中的数据一致性_使用事务保证johnny2332 小时前
Python Web服务器网关接口:WSGI、ASGI、RSGI、uWSGI、uwsgi、Gunicorn、Uvicornweixin_408717772 小时前
为什么宝塔面板定时访问URL任务总是报502_检查目标接口响应时间与延长任务执行超时设置小陈工2 小时前
python Web开发从入门到精通(二十七)微服务架构设计原则深度解析:告别拆分烦恼,掌握治理精髓(上)