centos修改mysql字符集的問題
今天遇到問題,在centos部署java Web專案,出現sql查詢異常,sql工具查詢沒問題,但是到程式裡就出事了
select * from officesupply_stock where goodsClassify='辦公用品' and goodsName!='無物品' and stocRemark!='刪除'
sql工具:查詢出來7條
在程式裡:0條
一開始認為是centos 中mysql的問題,也不完全錯,因為 有一句sql中 別名user 確實是這個問題,修改過後 成功執行,還有Centos對mysql大小寫有點敏感 不能寫成USE。。
但是這個問題不是,思路:為什麼查詢出來的結果對不上呢?在程式裡system.out列印引數 :'辦公用品',說明傳參沒問題,,列印查詢返回list的size(),發現為0,而且sql也在Log 中輸出了,那就是說,引數到了資料庫 ---執行sql,發生了問題,什麼問題呢?就是引數可能變成了一個不存在的值,查完為0,(因為sql正常打印出來,排除sql出錯的問題),那為什麼引數會變呢?想到了字符集的問題,進入mysql ,用命令檢視 ,發現字符集不是utf8 ,直截了當設定utf8,然後再來看,資料正常了!
回過頭來看,問題都有原因 ,日誌才是程式的眼睛。 其實問題都很簡單 只是沒仔細推理 --偉大程式設計專家 Yb1n
下面介紹修改字符集
一、登入MySQL檢視用show variables like 'character%';下字符集,顯示如下:
------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem |binary|
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
character_set_database和character_set_server的預設字符集還是latin1。
二、最簡單的完美修改方法,修改mysql的/etc/my.cnf 檔案中的字符集鍵值(注意配置的欄位細節):
[plain] view plain copy
1. 在[mysqld]欄位里加入character_set_server=utf8,如下:
2. [mysqld]
3. port = 3306
4. socket = /var/lib/mysql/mysql.sock
character_set_server=utf8
修改完成後,sudo systemctl restart mysqld重啟mysql服務就生效。
使用show variables like 'character%';檢視,發現數據庫編碼全已改成utf8。
[sql] view plain copy
1. +--------------------------+----------------------------+
2. | Variable_name | Value |
3. +--------------------------+----------------------------+
4. | character_set_client | utf8 |
5. | character_set_connection | utf8 |
6. | character_set_database | utf8 |
7. | character_set_filesystem | binary |
8. | character_set_results | utf8 |
9. | character_set_server | utf8 |
10. | character_set_system | utf8 |
11. | character_sets_dir | /usr/share/mysql/charsets/ |