MySQL编码不一致致使查询结果为空

升级数据库后(5.1到8.0),发现一个奇怪的问题,某些页面在升级前能够正常查询,但升级后什么也查不出来了,有时候还会查出错误的结果。通过一成天的排查,终于发现由两个缘由致使,现记录以下。mysql

第一是数据库的编码。使用中文关键字查不出结果(或结果错误),可是英文关键字能够正常查询。sql

还原数据库后默认的编码不是utf-8。执行下面命令能够查看当前数据库编码。数据库

show variables like 'collation%';

或者编码

show variables like '%character%';

 

修改编码的语句spa

set character_set_client=utf8 set character_set_connection=utf8 set character_set_database=utf8 set character_set_results=utf8 set character_set_server=utf8

可是重启MySQL服务后,再查看数据库的编码,发现又变回了原来的。命令行

原来使用命令行设置只是在当前会话中有效,当重启数据库后就会恢复默认编码。所以应该在MySQL的配置文件my.ini中设置。code

低版本MySQL的my.ini在安装路径下能够找到,可是8.0的版本存放在C:\ProgramData\MySQL\MySQL Server 8.0下,这是一个隐藏的文件夹server

打开my.ini后,加入以下配置blog

[mysql]
default-character-set=utf8 [mysqld] character_set_server=utf8 collation_server=utf8_general_ci

修改后重启MySQL服务,发现编码已经成功修改utf-8

第二种缘由是由于新版本MySQL的关键字致使

数据库的表中有个字段为virtual,在8.0中是虚拟列的关键字。

所以要在查询中加上``避免和关键字重复

其余的关键字Name、Class等没有问题。

相关文章
相关标签/搜索