查询在 Mysql 数据库中不起作用

Posted

技术标签:

【中文标题】查询在 Mysql 数据库中不起作用【英文标题】:Query not working in Mysql database 【发布时间】:2016-09-09 07:10:58 【问题描述】:

我对 mysql 数据库感到非常头疼。这是我的问题。

我正在开发一个使用 SQL Server 作为数据库的 php 网站,一切正常。 数据库 1

我必须将数据库更改为 MySQL,我已经完成并创建了一些存储过程和函数,这里一切正常。 数据库 2

现在我必须将 MySQL 数据库转移到另一个 MySQL 服务器,database 3。这里出现问题是因为现在我创建的旧存储过程和查询不起作用。我的 DB3 结构与 DB2 相同。

如果我在 DB2 select * from Online_Patient; 中触发此查询,则不会出错。

DB3 中的相同查询会引发错误:

错误代码:1146。表“Online_Patient”不存在

但是当我将查询更改为 select * from online_patient; 时,它会给出正确的结果。

那么有什么办法可以解决这个错误,或者我必须更改所有查询和存储过程,存储过程中有动态查询,所以无法将大写字母转换为小写字母。

【问题讨论】:

检查数据库的排序规则。将其设置为不区分大小写。 This 可能会有所帮助。 我正在使用 MySQL 工作台,您能指导我如何操作吗? 我建议将表格重命名为小写。最好使用小写的表名。 你的 mysql 服务器是在 Windows 还是 Unix 或 Linux 上运行的? @Reno 它在 Windows 中 【参考方案1】:

找到你的 mysql 配置文件。它应该命名为 my.cnf。您可以在输出的开头运行mysqld --help --verbose,这是您可以查找文件的默认位置。我的输出是:

Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf C:\xampp\mysql\my.ini C:\xampp\mysql\my.cnf

找到 lower_case_table_names 指令并将其设置为 1:

lower_case_table_names = 1

来自 MySQL 文档:http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_lower_case_table_names

如果设置为 0,则按指定存储表名,并且比较区分大小写。如果设置为 1,则表名以小写形式存储在磁盘上,并且比较不区分大小写。如果设置为 2,则表名按给定方式存储,但以小写形式进行比较。此选项也适用于数据库名称和表别名。有关其他信息,请参阅第 10.2.2 节,“标识符大小写敏感性”。

然后重启mysql服务器。

【讨论】:

这篇文章也可能有帮助:dev.mysql.com/doc/refman/5.7/en/… 我的数据库在服务器上,我该如何更改 my.cnf ?服务不会让我更改 my.cnf 文件,你不觉得吗?如果可能,请分享。 如果您有权访问服务器并有权更改 conf 文件,则不会有问题。如果您无权访问,则应重命名所有表或更改查询。我没有看到其他解决方案。

以上是关于查询在 Mysql 数据库中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

更新查询在 mysql 工作台中不起作用

PHP比较运算符在MySQL条纹查询中不起作用

SQL 查询在最新版本的 MySQL 中不起作用

mysql 订单项在我的查询中不起作用

SQL_CALC_FOUND_ROWS 在 mysql 中不起作用

动态查询在 asp.net 中不起作用