【发布时间】:2016-08-14 02:12:25
【问题描述】:
我使用pkg install mysql57-server 命令将我的 FreeBSD 服务器从 MySQL 5.6 升级到 5.7,并打开了对 InnoDB 引擎的支持。在解决了更改的配置问题以便我可以成功运行 mysql_upgrade -u root -p 后,它报告说我现有的所有表实际上都不存在 - 因为它们以 StudlyCaps 文件名存储在磁盘上。
我有
lower_case_table_names = 0
在当前和活动的配置文件 (/usr/local/etc/mysql/my.cnf) 中,但是当我在 mysql 解释器中运行 show variables like 'lower_case_table_names'; 时,我得到了
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_table_names | 1 |
+------------------------+-------+
1 row in set (0.00 sec)
我也试过
root@localhost [none]> set lower_case_table_names=0;
ERROR 1238 (HY000): Variable 'lower_case_table_names' is a read only variable
在the MySQL documentation for lower_case_table_names我发现了这条评论:
如果您使用 InnoDB 表,则应在所有平台上将此变量设置为 1,以强制将名称转换为小写。
似乎有人决定“您应该将此变量设置为 1”的意思是“此变量必须为 1”并删除了更改它的功能。
除其他问题外,这意味着phpMyAdmin 现在以所有小写字母显示表名,而不是它们构建时使用的更易读的StudlyCaps。我还担心这会破坏我的 所有 使用设计的 StudlyCaps 表名编写 PHP 代码的网站。
有没有办法解决这个无法恢复到 MySQL 5.6 的问题?
【问题讨论】:
-
您可以使用 mysql 转储切换到不区分大小写的表名。您的 php 代码通常不会中断,除非您实际上使用了两次表名。不过 =0 应该可以工作。确保您在
[mysqld]下拥有该选项。检查列出的 here 可能优先的任何其他配置文件。运行mysqld --verbose --help检查启动服务器时将使用哪个值(如果你用=0启动mysql 5.7并且它不起作用,它只会退出,而不是切换到=1,所以它可能在某处设置为1 )。
标签: mysql upgrade freebsd case-sensitive