在Mysql数据库中查询不起作用
在Mysql数据库中查询不起作用
我在使用MySQL数据库方面遇到了严重的头痛。以下是我的问题。
我正在使用Php开发一个网站,使用SQL Server作为数据库,一切工作正常。数据库1
然后我必须将数据库更改为MySQL,我已经完成了这个过程,并创建了一些存储过程和函数,一切也都正常工作。数据库2
现在我必须将MySQL数据库迁移到另一个MySQL服务器,数据库3。问题出现在这里,因为现在我所创建的旧存储过程和查询都不起作用了。我的数据库3的结构与数据库2相同。
如果我在数据库2中执行这个查询select * from Online_Patient;
没有错误。
同样的查询在数据库3中会抛出错误:
错误代码:1146。表'Online_Patient'不存在。
但是当我将查询改为select * from online_patient;
时,它会给我正确的结果。
所以是否有办法解决这个错误,或者我必须更改所有的查询和存储过程,存储过程中有动态查询,所以不能将大写转换为小写。
在使用MySQL数据库时,可能会遇到查询无法正常工作的问题。通常,这个问题是由于MySQL的配置文件中的设置引起的。解决这个问题的方法是,在配置文件中更改相关设置。
首先,定位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服务器。
如果你的数据库是在服务器上的,那么如何更改my.cnf
文件呢?如果你有服务器访问权限和更改配置文件的权限,那么这不会是一个问题。如果你没有访问权限,你可以选择重命名所有的表或更改查询语句。我没有看到其他解决方案。
另外,这篇文章可能对你有帮助:dev.mysql.com/doc/refman/5.7/en/…