lower_case_table_names=1需修改phpenv\mysql\my.ini的[mysqld]段并重启mysql服务;该参数仅影响新表名转换,不重命名已有大写表文件,故需先导出数据、删库、改参重启、重建小写库再导入;php中表名必须统一小写以保证跨平台兼容。

PHP 本身不控制 lower_case_table_names,改这个参数必须动 phpEnv 底层的 MySQL 配置文件,且重启服务才生效。
phpEnv 中修改 lower_case_table_names=1 的实际路径
phpEnv 是 Windows 下集成环境(类似 XAMPP),其 MySQL 配置文件默认在:phpEnv\mysql\my.ini(不是 my.cnf)。
打开该文件,在 [mysqld] 段落末尾添加:
lower_case_table_names = 1
注意:lower_case_table_names 必须写在 [mysqld] 下,写在 [client] 或文件末尾全局位置无效。
保存后,必须通过 phpEnv 控制面板「重启 MySQL」——仅重启 Apache 不起作用。
为什么改完仍报 Table 'xxx' doesn't exist
这是最常踩的坑:参数生效 ≠ 原有大写表名自动可用。
-
lower_case_table_names = 1启用后,MySQL 会把所有新创建的表名转为小写存储,但不会重命名已存在的大写表 - 如果之前建过
CREATE TABLE User,它在磁盘上仍是User.frm(或User.ibd),而新规则只按小写user去找文件 → 找不到 → 报错 - 此时执行
SELECT * FROM user可能成功,但SELECT * FROM User仍失败(取决于当前值是否已完全切换)
真正安全的做法是:先导出数据 → 删除原库 → 改参数并重启 → 新建小写库名 → 导入。
PHP 代码里写表名大小写要不要统一
要,而且必须统一用小写。
- 即使
lower_case_table_names = 1,PHP 中写SELECT * FROM User和SELECT * FROM user都能执行成功,但可维护性极差 - 一旦部署到 Linux 生产环境(默认
=0),User立刻报错Table 'db.User' doesn't exist -
PDO::ATTR_CASE只影响字段名(column),对表名(table)完全无感,别指望它帮忙
结论:PHP 层面所有 SQL 里的表名,一律用小写字母 + 下划线,例如 user_profile、order_item,别碰大写。
改 lower_case_table_names 不是 PHP 编码问题,而是 MySQL 实例级配置变更;它牵扯磁盘文件名、系统变量、跨平台一致性,稍有不慎就丢表。真要改,先备份,再验证路径,最后逐库 rename —— 别信“加一行重启就好”的说法。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











