php - MySQL lower_case_table_names 导致 PHP 连接错误

标签 php mysql database mysqli

在 MySQL 中,lower_case_table_names 全局变量决定表名写入磁盘时是否保留字母大小写,以及表名匹配是否区分大小写。根据the docs :

If you are using InnoDB or MySQL Cluster (NDB) tables, you should set this variable to 1 on all platforms to force names to be converted to lowercase.

我的网站运行在 Apache 2.4 上,带有 MySQL 5.6.23 和 PHP 5.5.25。我的大部分表都是 MyISAM,但我想将它们转换为 InnoDB。根据上面的指令,我尝试在MySQL的配置文件中设置lower_case_table_names=1。但是,重新启动服务器后,我无法再使用 mysqli 扩展从 PHP 代码连接到数据库。代码 $this->mysqli = new\mysqli($host,$user,$pwd,$db_name,$port); 返回 mysqli->connect_error = "Access returned for user '用户名'@'localhost'(使用密码:YES)”。我确信登录凭据是好的,原因如下:

  • 在 PHP 环境之外,我可以使用以下命令连接到数据库 使用远程工具 (SQLyog) 获得相同的凭据。
  • 如果我从配置文件中删除 lower_case_table_names=1 行并 重新启动服务器,一切恢复正常。

在 MySQL 服务器启动过程中 -- 当 lower_case_table_names=1 时 -- 错误日志显示 3 个警告:

  • [警告] 具有隐式 DEFAULT 值的 TIMESTAMP 已被弃用。请 使用 --explicit_defaults_for_timestamp 服务器选项(请参阅 文档以获取更多详细信息)。
  • [警告]“db”条目“%_ldap_ou=地址簿 cpldap@localhost”有 混合大小写的数据库已被迫小写,因为 lower_case_table_names 已设置。将无法删除此内容 使用 REVOKE 授予权限。
  • [警告]“db”条目“logaholicdb_host logaholic@localhost”有 混合大小写的数据库已被迫小写,因为 lower_case_table_names 已设置。将无法删除此内容 使用 REVOKE 授予权限。

这两个配置下还记录了几个[Note]条目。删除 lower_case_table_names=1 行后,仅出现第一个警告。被拒绝访问的用户对相关数据库具有以下权限(SHOW GRANTS FOR 'username'@'localhost'; 的结果)

  • GRANT USAGE ON . TO 'username'@'localhost' IDENTIFIED BY PASSWORD '*6DF294D9BAA539074CFC4DD08E77909FE53CFCE1'
  • GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE ON my_db.* TO 'username'@'localhost'

为什么连接失败以及如何修复它?

最佳答案

第 1 步:首先通过 mysqldump 命令备份数据库(所有故事)。

第 2 步:现在将您的配置设置更改为小写。

第三步:现在重新启动mysql服务。

第四步:现在恢复备份。

默认情况下,所有表名称都以小写形式写入磁盘,甚至您可以通过小写/大写/驼峰形式调用它们,但实际上它们将以小写形式存储在服务器上。

关于php - MySQL lower_case_table_names 导致 PHP 连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31846823/

相关文章:

php - 如何记录[类型]的数组?

C# Winforms 控件 - DataGridView - 更新数据库

mysql - 使用MySQL评论问题进行Flyway迁移

database - Apriori 算法的数据集

ruby-on-rails - 为什么 ActiveRecord 对每个连接发出单独的查询?

php - 是否可以从 Mysql 触发器向 php 传递一个值?

PHP - 接受多个支付网关

php - 检查 OpenCart 中的购物车是否为空

php - sql选择当前图像代码

Mysql - 在实际插入时获取自动增量ID