小感mysql字符集

2021-08-25 02:12:03 字數 1015 閱讀 4828

場景

資料庫使用mysql5, 在開發機器上測試過,增刪查改都沒有問題,然後拉到現網上灰度測試一下,發現部分含有中文的操作結果不符合預期,於是select了一下表裡面的內容,發現內容中有許多????,直覺告訴我,charset問題。 然後回歸線下,排除了程式的問題後,diff了兩台mysql一些配置上的問題。

結果如下:

開發機器上的charset設定     

現網機器上的charset設定

google一下關於character_set_client/connection/database/results:

簡單摘要

character_set_client      客戶端向伺服器傳送查詢時的字符集

character_set_results    伺服器向客戶端傳送資料時的字符集

character_set_connection  伺服器將收到的查詢串轉換為此字符集

character_set_database  資料庫預設的字符集

...其他幾個掠過...

查了以後,再用show create table *** 可以確認一下,果然table字符集預設採用了database的gbk。

最後解決,採用alter table 的charset搞定,注意,如果你的表中已經有資料了,那麼你需要自己寫工具將資料dump出來再修正後插回去,否則直接這樣alter對歷史資料是無效的。

感悟

mysql 字符集層次架構非常靈活,但易用性確實差了一點。 層次也太多了,client|result  ,  connection,  database, os ; 不僅如此在同一database, 可對不同table,甚至到列作定製,確實超級靈活。

選項太多,出錯的機會就更多。 如果只有乙個選項,沒得選,根本就沒出錯的機會。

另外,層次如果只有 client,database,os 那會怎樣?我個人就覺得超級好理解。如果真有那麼奇奇怪怪的需求如同乙個系統中有n多種字符集,大可提到邏輯層來做。

小談MySQL字符集

首先,這片文章純粹是我的個人經驗之談,適用於我常見的環境及專案中.個人建議,資料庫字符集盡量使用utf8 html頁面對應的是utf 8 以使你的資料能很順利的實現遷移,因為utf8字符集是目前最適合於實現多 種不同字符集之間的轉換的字符集,儘管你在命令列工具上可能無法正確檢視資料庫中的內容,我依然...

mysql 集群字符集 Mysql 字符集

字符集與字元比較 字符集字符集是某種字元的集合,比如最常見的ascii碼,由127個字元組成,只需要乙個位元組就能表示 我們常說的字符集還是gbk iso utf8 mysql 我們使用得最多的字符集就是gbk 和 utf8了 他們都是變長字符集,如果字元在ascii範圍內就使用乙個位元組表示,其他...

mysql字符集 MySQL字符集選擇

一 怎樣選擇合適的字符集 對mysql資料庫來說,字符集很重要,因為資料庫儲存的資料大部分都是各種文字,字符集對資料庫的儲存,處理效能都會有所影響。主要考慮一下幾方面的因素 1.滿足應用支援語言的需求,應用處理各種各樣的文字,發布到使用不同語言的國家或地區,可以選擇unicode字符集,mysql的...