溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql亂碼現(xiàn)象及對(duì)字符集的理解

發(fā)布時(shí)間:2020-08-09 08:44:27 來(lái)源:ITPUB博客 閱讀:176 作者:lusklusklusk 欄目:MySQL數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)版本是5.7.17

現(xiàn)象1
Navicat Premium導(dǎo)sqlserver數(shù)據(jù)到mysql時(shí),發(fā)現(xiàn)一些表只導(dǎo)了表結(jié)構(gòu)沒(méi)有導(dǎo)入數(shù)據(jù),一些表導(dǎo)入了部分?jǐn)?shù)據(jù),一些表數(shù)據(jù)全部導(dǎo)入成功

查找原因:
1.發(fā)現(xiàn)導(dǎo)入成功的數(shù)據(jù)都是沒(méi)有任何中文的
2.在mysql上刪除只導(dǎo)了表結(jié)構(gòu)沒(méi)有導(dǎo)入數(shù)據(jù)的表A,使用Navicat Premium重新表A,查看Navicat Premium導(dǎo)入日志[Err] [Row1] [Imp] 1366 - Incorrect string value: '\xE6\xAD\xA3\xE5\xB8\xB8...' for column 'colunmname1' at row 1
3.在sqlserver上查看select colunmname1 from A發(fā)現(xiàn)都是中文內(nèi)容
至此查出原因:就是因?yàn)楹?jiǎn)體中文的原因,導(dǎo)致沒(méi)有導(dǎo)入成功

解決方法
方法1:在mysql上查詢表A的建表語(yǔ)句show create table A,發(fā)現(xiàn)建表語(yǔ)句最后是CHARSET=latin1,重新修改表A的建表語(yǔ)句把CHARSET=latin1改成CHARSET=utf8,再刪除表A,再重新建立表A,再導(dǎo)表就OK了


方法2:mysql -uroot -p123456
mysql>show variables like 'char%';發(fā)現(xiàn)庫(kù)里面的字符集character_set_database是latin1
修改/etc/my.cnf新增如下配置
[mysqld]下新增character-set-server=utf8
[mysql]下新增default-character-set=utf8
[client]下新增default-character-set=utf8
service mysqld restart
再在mysql上drop導(dǎo)入沒(méi)有完全成功的表,再重新導(dǎo)表(當(dāng)然在個(gè)人實(shí)驗(yàn)中,導(dǎo)入還是繼續(xù)報(bào)錯(cuò)的,因?yàn)閙ysql -uroot -p123456進(jìn)去后沒(méi)有選擇庫(kù),修改后只是新增庫(kù)的字符集會(huì)變成utf8,當(dāng)然選擇了庫(kù)也沒(méi)用,雖然重啟了數(shù)據(jù)庫(kù),但表A對(duì)應(yīng)的庫(kù)如DATABASEA是修改配置之前建立的,它的字符集還是latin1,除非重建DATABASEA把字符集修改為utf8,這樣風(fēng)險(xiǎn)太高,里面的東西都得重新弄過(guò)一次)



現(xiàn)象2
mysql字符集都是utf8了,但是在個(gè)人的windows機(jī)器上使用SQLyogEnt查詢表A,發(fā)現(xiàn)中文亂碼,加上語(yǔ)句后SET character_set_results=gbk后才不亂碼
而在個(gè)人的windows機(jī)器上使用putty登錄mysql服務(wù)器使用mysql>查詢發(fā)現(xiàn)表A不亂碼

原因:
個(gè)人電腦cmd輸入chcp值是936對(duì)應(yīng)簡(jiǎn)體中文
mysql服務(wù)器echo $LANG顯示是zh_CN.UTF-8

在windows上通過(guò)工具SQLyogEnt連接mysql查詢,其實(shí)是在windows上查詢,使用的是windows的字符集gbk,但是mysql字符集是utf8,所以會(huì)亂碼
在windows上通過(guò)putty連接mysql服務(wù)器查詢,其實(shí)就是在mysql服務(wù)器端查詢,mysql服務(wù)器字符集UTF-8,mysql字符集是utf8,所以不會(huì)亂碼



理解
1.mysql安裝后數(shù)據(jù)庫(kù)字符集默認(rèn)是latin1

2.my.cnf修改字符集配置并重啟后,只是對(duì)新增的庫(kù)生效,老庫(kù)還是latin1,老庫(kù)新增表也還是隨老庫(kù)latin1
3.庫(kù)和表的字符集可以不一樣,遇到問(wèn)題評(píng)估下是重導(dǎo)表還是重導(dǎo)庫(kù)

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI