溫馨提示×

溫馨提示×

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

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

mysql亂碼現象及對字符集的理解

發布時間:2020-08-09 08:44:27 來源:ITPUB博客 閱讀:222 作者:lusklusklusk 欄目:MySQL數據庫
數據庫版本是5.7.17

現象1
Navicat Premium導sqlserver數據到mysql時,發現一些表只導了表結構沒有導入數據,一些表導入了部分數據,一些表數據全部導入成功

查找原因:
1.發現導入成功的數據都是沒有任何中文的
2.在mysql上刪除只導了表結構沒有導入數據的表A,使用Navicat Premium重新表A,查看Navicat Premium導入日志[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發現都是中文內容
至此查出原因:就是因為簡體中文的原因,導致沒有導入成功

解決方法
方法1:在mysql上查詢表A的建表語句show create table A,發現建表語句最后是CHARSET=latin1,重新修改表A的建表語句把CHARSET=latin1改成CHARSET=utf8,再刪除表A,再重新建立表A,再導表就OK了


方法2:mysql -uroot -p123456
mysql>show variables like 'char%';發現庫里面的字符集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導入沒有完全成功的表,再重新導表(當然在個人實驗中,導入還是繼續報錯的,因為mysql -uroot -p123456進去后沒有選擇庫,修改后只是新增庫的字符集會變成utf8,當然選擇了庫也沒用,雖然重啟了數據庫,但表A對應的庫如DATABASEA是修改配置之前建立的,它的字符集還是latin1,除非重建DATABASEA把字符集修改為utf8,這樣風險太高,里面的東西都得重新弄過一次)



現象2
mysql字符集都是utf8了,但是在個人的windows機器上使用SQLyogEnt查詢表A,發現中文亂碼,加上語句后SET character_set_results=gbk后才不亂碼
而在個人的windows機器上使用putty登錄mysql服務器使用mysql>查詢發現表A不亂碼

原因:
個人電腦cmd輸入chcp值是936對應簡體中文
mysql服務器echo $LANG顯示是zh_CN.UTF-8

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



理解
1.mysql安裝后數據庫字符集默認是latin1

2.my.cnf修改字符集配置并重啟后,只是對新增的庫生效,老庫還是latin1,老庫新增表也還是隨老庫latin1
3.庫和表的字符集可以不一樣,遇到問題評估下是重導表還是重導庫

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女