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.庫和表的字符集可以不一樣,遇到問題評估下是重導表還是重導庫
現象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.庫和表的字符集可以不一樣,遇到問題評估下是重導表還是重導庫
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2136291/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql 字符集亂碼探究MySql
- mysql字符集與亂碼MySql
- oracle em 按鈕亂碼現象Oracle
- MySQL字符集亂碼與解決方案MySql
- mysql亂碼?一勞永逸修改mysql字符集!MySql
- C/C++—— 對多型現象的理解C++多型
- 為什麼網頁出現亂碼現象網頁
- 字符集的理解與亂碼的解決 必須作業系統字符集作業系統
- MySQL 字符集與亂碼與collation設定的問題?MySql
- Jmeter json格式 unicode亂碼現象解決方法JMeterJSONUnicode
- linux出現故障字符集亂碼故障排查思路Linux
- 字符集例子-同一字元不同字符集編碼不同及匯入匯出的亂碼字元
- 發現韓文字符集出現亂碼.??? 請問如何解決?
- 盲人摸象--我對UML的理解 (轉)
- 動態建立script引入js檔案導致亂碼現象JS
- 使用 SecureCRT連線 linux 主機,會有亂碼現象SecurecrtLinux
- MySQL亂碼MySql
- Mysql資料庫亂碼出現的各個階段以及對應方法MySql資料庫
- rhel4 mysql5.5字符集_客戶端mysql亂碼處理MySql客戶端
- mysql的字符集校對規則MySql
- UITableview重新整理時介面“亂跑”現象UIView
- 小程式的亂象迷局
- oracle 字符集亂碼本質驗證Oracle
- mysql中文亂碼MySql
- 深入理解Emoji(一) —— 字符集,字符集編碼
- 10分鐘學會理解和解決MySQL亂碼問題MySql
- linux 字符集 頁面顯示亂碼Linux
- MySQL亂碼的幾種原因MySql
- Mysql之儲存引擎及字符集MySql儲存引擎
- mysql亂碼問題MySql
- 關於客戶端字符集與亂碼的困擾客戶端
- JBOSS下的JSP頁面字符集亂碼問題JS
- 微商亂象橫生 代理捲款跑路事件頻現事件
- jboss3.2+mysql4.0 cmp出現中文亂碼S3MySql
- Testng results報告出現中文亂碼和更新maven出現報錯現象實戰解決Maven
- 面對創投圈亂象,創業者該如何抉擇?創投創業
- 從根上理解 MySQL 的字符集和比較規則MySql
- MySQL字符集和校對規則(Collation)MySql