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等沒有問題。

相關文章
相關標籤/搜索