升級數據庫後(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等沒有問題。