mysql中文資料問題

2021-09-26 10:54:36 字數 1889 閱讀 9516

中文資料問題的本質就是字符集的問題。

由於計算機僅識別二進位制資料,而且人類則更傾向於識別字元(符號),因此就需要乙個二進位制與字元的對應關係,也就是字符集。

在咱們通過 mysql 資料庫的客戶端向伺服器插入中文資料的時候,有可能失敗,原因則可能是客戶端和伺服器的字符集設定不同導致的,例如:

客戶端的字符集為gbk,則乙個中文字元,對應兩個位元組;

伺服器的字符集為utf8,則乙個中文字元,對應三個位元組。

這樣顯然會在編碼轉換的過程**現問題,從而導致插入中文資料失敗。

由於所有的資料庫伺服器表現的一些特性都是通過伺服器端的變數來保持的,因此系統會先讀取自己的變數,看看具體的表現形式。這樣的話,咱們就可以通過以下語句檢視伺服器到底識別哪些字符集:

– 檢視伺服器識別的全部字符集

通過以上查詢,咱們會發現:伺服器是萬能的,其支援所有字符集。

既然伺服器支援這麼多字符集,總會有一種是伺服器預設的和客戶端打交道的字符集。因此,咱們可以通過以下語句檢視伺服器預設的對外處理的字符集:

– 檢視伺服器預設的對外處理的字符集

標註1:伺服器預設的客戶端傳來的資料字符集為utf8;

標註2:連線層字符集為utf8;

標註3:當前資料庫的字符集為utf8;

標註4:伺服器預設的對外處理的字符集utf8.

通過以上查詢,咱們會發現:伺服器預設的對外處理的字符集是utf8.

那麼反過來,咱們在通過客戶端的屬性檢視客戶端支援的字符集:

顯然,咱們已經找到了問題的根源,確實是:客戶端支援的字符集為gbk,而伺服器預設的對外處理的字符集為utf8,因此產生矛盾。

既然問題已經找到了,那麼解決方案就是:修改伺服器預設接收的字符集為gbk.

– 修改伺服器預設接收的字符集為 gbk(不區分大小寫)

set character_set_client = gbk;

這樣的話,咱們再插入中文資料的時候,就會插入成功啦!but,在咱們檢視資料的時候,又發現了乙個問題,就是之前咱們插入的中文資料顯示亂碼啦!不過這也正常,因為查詢的時候,資料的**是伺服器(utf8),解析資料的是客戶端,而客戶端僅識別gbk格式的資料,顯示亂碼也就在意料之中啦!

因此,解決方案就是:修改伺服器給客戶端的資料字符集為gbk.

– 修改伺服器給客戶端的資料字符集為 gbk(不區分大小寫)

如上圖所示,向伺服器插入中文資料的問題已經解決啦!

此外,咱們之前使用的 sql 語句:

– 修改的只是會話級別,即當前客戶端當次連線有效,關閉後失效

set 變數 = 值;

這樣的話,每當咱們重啟客戶端的時候,都要依次重新進行設定,比較麻煩,因此咱們可以使用快捷的設定方式,即:

set names 字符集;

1例如,

/**

表示上述一條語句,將同時改變三個變數的值。其中,connection為連線層,是字符集轉換的中間者,如果其和client和results的字符集一致,則效率更高,不一致也沒有關係。

mysql中文資料 MySQL中文資料問題怎麼處理

mysql中文資料問題怎麼處理 閱讀 124 中文資料問題 中文資料問題的本質就是字符集的問題。由於計算機僅識別二進位制資料,而且人類則更傾向於識別字元 符號 因此就需要乙個二進位制與字元的對應關係,也就是字符集。在咱們通過 mysql 資料庫的客戶端向雲伺服器插入中文資料的時候,有可能失敗,原因則...

資料庫中文亂碼問題(mysql)

好多朋友都遇到過資料庫中訪問中文亂碼的情況,要解決有很多方法,這裡給我我個人遇到的情況!首先要做到的是將資料庫與程式統一編碼 都用utf 8,或都用gbk,gb2312.下面給出的是都用utf 8的例子 1.建資料庫時要把資料庫的型別設定為utf 8的,2.連線資料庫時要宣告採用utf 8字符集 c...

MySQL 插入資料時,中文亂碼問題

當向 mysql 資料庫插入一條帶有中文的資料形如 insert into employee values null,張三 female 1995 10 08 2015 11 12 sales 2000,是個好員工!出現亂碼時,可以使用語句show variables like character ...