關於MySQL中文字元出現亂碼的問題

2021-05-22 21:09:48 字數 1698 閱讀 2184

既然今天寫了個部落格序言,今天總還得寫點別的什麼東西吧,呵呵!

好啦,現在就來個現炒現賣的。

由於本人正在做乙個資料庫遷移工具,主要是在access、foxpro、sqlserver、mysql、oracle、dbase、paradox等桌面的,伺服器型的各類資料庫之間進行整個資料庫的遷移,但是由於以前很少接觸過mysql、oracle等資料庫,就按以前操作access、sqlserver、foxpro等資料庫的方式進行操作,結果可想而知嘍,不是這裡出現錯誤,就是那裡出現錯誤。還好,現在網際網路如此發達,有什麼問題直接google一下或者baidu一下,一般來說都可以找到比較滿意的答案,但是,也有一些問題是很難在網上找到答案的,或者只能找到相類似的答案。

總的說來,mysql出現中文亂碼主要由字符集的設定不同而引起的:

說來mysql也算**,它的字符集的設定遍及整個資料庫的方方面面,有伺服器字元設定,有客戶端字元設定,有資料庫級別的字符集設定,有資料表級別的字符集設定,還有字段級別的字符集設定,還有連線字串方面的,有時設定了這頭忘記了那頭,只要有一頭沒有設定,所以難免會出現中文亂碼的問題。所以要解決出現中文亂碼的問題還是要將上面提到的各個方面都設定成支援中文的字符集。

既然找到了問題的根源,就可以對症下藥了,解決方案如下:

一、在建立資料庫的時候指定字符集,如果你是在某種資料庫工具如mysql-front下建立資料庫,工具在建立資料庫時自然會叫你選擇一種字符集,一般來說,選擇uft8為最好。如果你是在程式中動態建立資料庫,那麼你必須在建立資料庫時加上一句:default character set utf8 collate utf8_general_ci;,比如這樣一條建立資料庫指令:create database yourdatabasename default character set utf8 collate utf8_general_ci;

二、同理,在建立資料表時,如果是使用某種資料庫工具建立資料表,也肯定會叫你選擇字符集的,你選擇utf8就行,如果是動態建立資料表,在建立資料表的末尾也要加上一句:engine=myisam  default charset utf8 collate utf8_general_ci。比如這樣一條建立資料表的指令:create table yourtablename(欄位一 int not null,欄位二 varchar(10)) engine=myisam  default charset utf8 collate utf8_general_ci

三、在建立資料庫和資料表時如果指定了字符集,那麼一般來說資料表的列會自動應用與資料表相同的字符集,不需要單獨對資料表的列進行字符集設定。

四、最後在連線資料庫時也一樣要加上字符集設定,比如:"server=" & yourservername & ";database=" & yourdatabasename & ";uid=" & yourusername & ";pwd=" & yourpassword & ";charset=utf8;"

五、前面幾點提到的字符集設定一定要統一設定成utf8,當然或許也可以設定成gbk或gb2312等,這個我沒測試過,但有一點是必須的,就是一定要統一。

做到上面幾點,基本就不會出現字串亂碼的問題了,也不會出現插入包含中文內容的值時出現異常了。

我也是現學現賣,雖然我解決了顯示和插入值時出現中文亂碼的問題,但是,我在連線資料庫名稱是中文的資料庫時卻出現伺服器不認識該資料庫的錯誤,顯示錯誤資訊是unknow database ????,這個問題我到現在也解決不了,網上相關的資訊也相當少,有哪位高人如果看到我的部落格,能否指點一二?

MySQL不能插入中文字元及中文字元亂碼問題

mysql的預設編碼是latin1,不支援中文,要支援中午需要把資料庫的預設編碼修改為gbk或者utf8。在安裝後mysql之後,它的配置檔案不是很給力,不知道你們的是不是,反正我的是!開始插入中文字元的時候出現如下錯誤 error 1366 hy000 incorrect string value...

MySQL不能插入中文字元及中文字元亂碼問題

mysql的預設編碼是latin1,不支援中文,要支援中午需要把資料庫的預設編碼修改為gbk或者utf8。在安裝後mysql之後,它的配置檔案不是很給力,不知道你們的是不是,反正我的是!開始插入中文字元的時候出現如下錯誤 error 1366 hy000 incorrect string value...

QT 中文字元亂碼

qstring qbytearray 後位元組碼與window下的不對。下面的中文字元 中國人民億 data是我正常後的gbk位元組,value是直接使用 qstring totoutf8 qstring tolocal8bit 之類的與期望不符的位元組碼。首先qstring 轉換成qbytearr...