升级数据库后(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等没有问题。