溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

記一次mysql中文字符亂碼的問題排查

發(fā)布時間:2020-08-03 18:38:04 來源:網絡 閱讀:743 作者:emma_cql 欄目:MySQL數據庫

今天開發(fā)反應兩樣的程序往一個庫里面插入數據正常,往另外一個庫里面插入數據有亂碼。第一反應就是兩個數據庫關于字符集的配置不一樣。


在兩個庫分別查看參數:

show variables like "%char%";

+--------------------------+------------------------------------------+

| Variable_name            | Value                                    |

+--------------------------+------------------------------------------+

| character_set_client     | utf8                                     |

| character_set_connection | utf8                                     |

| character_set_database   | utf8                                     |

| character_set_filesystem | binary                                   |

| character_set_results    | utf8                                     |

| character_set_server     | latin1                                   |

| character_set_system     | utf8                                     |

| character_sets_dir       | /usr/local/mysql/share/charsets/ |

+--------------------------+------------------------------------------+


>show variables like "%char%";

+--------------------------+------------------------------------------+

| Variable_name            | Value                                    |

+--------------------------+------------------------------------------+

| character_set_client     | utf8                                     |

| character_set_connection | utf8                                     |

| character_set_database   | utf8                                     |

| character_set_filesystem | binary                                   |

| character_set_results    | utf8                                     |

| character_set_server     | utf8                                     |

| character_set_system     | utf8                                     |

| character_sets_dir       | /usr/local/mysql/share/charsets/ |

+--------------------------+------------------------------------------+


可以看到character_set_server的參數配置不一樣,于是將有問題的那個庫配置成utf8,開發(fā)再次測試的時候表示還有亂碼問題,這時想起來校驗字符集沒有改,于是分別查看兩邊校驗字符集的差異:

>show variables like "%coll%";

+----------------------+-------------------+

| Variable_name        | Value             |

+----------------------+-------------------+

| collation_connection | utf8_general_ci   |

| collation_database   | utf8_general_ci   |

| collation_server     | latin1_swedish_ci |

+----------------------+-------------------+


>show variables like "%coll%";

+----------------------+-----------------+

| Variable_name        | Value           |

+----------------------+-----------------+

| collation_connection | utf8_general_ci |

| collation_database   | utf8_general_ci |

| collation_server     | utf8_general_ci |

+----------------------+-----------------+

可以看到collation_server 參數設置不一致,于是把這個參數也改成了utf8,再次測試的時候數據顯示正常。


mysql支持多個層次的字符集設置:

服務層(server)、數據庫層(database)、數據表(table)、字段(column)、連接(connection)、結果集(result)

優(yōu)先級:server > database > table > column

為了避免出現因字符不一致導致的中文亂碼的問題,最好就是將字符集全部設置成一樣的。


另外提一下skip-character-set-client-handshake這個參數,可以通過開啟這個參數來過濾客戶端設置的字符集


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI