激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL字符集 GBK、GB2312、UTF8區別 解決MYSQL中文亂碼問題

MySQL字符集 GBK、GB2312、UTF8區別 解決MYSQL中文亂碼問題

2019-12-06 15:59MYSQL教程網 Mysql

MYSQL中文亂碼問題原因有很多,腳本之家以前發布過很多相關文章,這篇文章介紹mysql相關的一些知識更詳細

MySQL中涉及的幾個字符集 

character-set-server/default-character-set:服務器字符集,默認情況下所采用的。 
character-set-database:數據庫字符集。 
character-set-table:數據庫表字符集。 
優先級依次增加。所以一般情況下只需要設置character-set-server,而在創建數據庫和表時不特別指定字符集,這樣統一采用character-set-server字符集。 
character-set-client:客戶端的字符集。客戶端默認字符集。當客戶端向服務器發送請求時,請求以該字符集進行編碼。 
character-set-results:結果字符集。服務器向客戶端返回結果或者信息時,結果以該字符集進行編碼。 
在客戶端,如果沒有定義character-set-results,則采用character-set-client字符集作為默認的字符集。所以只需要設置character-set-client字符集。 

要處理中文,則可以將character-set-server和character-set-client均設置為GB2312,如果要同時處理多國語言,則設置為UTF8。 

關于MySQL的中文問題 

解決亂碼的方法是,在執行SQL語句之前,將MySQL以下三個系統參數設置為與服務器字符集character-set-server相同的字符集。 
character_set_client:客戶端的字符集。 
character_set_results:結果字符集。 
character_set_connection:連接字符集。 
設置這三個系統參數通過向MySQL發送語句:set names gb2312 

關于GBK、GB2312、UTF8 

UTF-8:Unicode Transformation Format-8bit,允許含BOM,但通常不含BOM。是用以解決國際上字符的一種多字節編碼,它對英文使用8位(即一個字節),中文使用24為(三個字節)來編碼。UTF-8包含全世界所有國家需要用到的字符,是國際編碼,通用性強。UTF-8編碼的文字可以在各國支持UTF8字符集的瀏覽器上顯示。如,如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支持包。 

GBK是國家標準GB2312基礎上擴容后兼容GB2312的標準。GBK的文字編碼是用雙字節來表示的,即不論中、英文字符均使用雙字節來表示,為了區分中文,將其最高位都設定成1。GBK包含全部中文字符,是國家編碼,通用性比UTF8差,不過UTF8占用的數據庫比GBD大。 

GBK、GB2312等與UTF8之間都必須通過Unicode編碼才能相互轉換: 
GBK、GB2312--Unicode--UTF8 
UTF8--Unicode--GBK、GB2312 

對于一個網站、論壇來說,如果英文字符較多,則建議使用UTF-8節省空間。不過現在很多論壇的插件一般只支持GBK。 

GB2312是GBK的子集,GBK是GB18030的子集 
GBK是包括中日韓字符的大字符集合 
如果是中文的網站 推薦GB2312 GBK有時還是有點問題 
為了避免所有亂碼問題,應該采用UTF-8,將來要支持國際化也非常方便 
UTF-8可以看作是大字符集,它包含了大部分文字的編碼。 
使用UTF-8的一個好處是其他地區的用戶(如香港臺灣)無需安裝簡體中文支持就能正常觀看你的文字而不會出現亂碼。 

gb2312是簡體中文的碼 
gbk支持簡體中文及繁體中文 
big5支持繁體中文 
utf-8支持幾乎所有字符 

首先分析亂碼的情況 
1.寫入數據庫時作為亂碼寫入 
2.查詢結果以亂碼返回 
究竟在發生亂碼時是哪一種情況呢? 
我們先在mysql 命令行下輸入 
show variables like '%char%'; 
查看mysql 字符集設置情況: 

mysql> show variables like '%char%'; 
+--------------------------+----------------------------------------+ 
| Variable_name | Value | 
+--------------------------+----------------------------------------+ 
| character_set_client | gbk | 
| character_set_connection | gbk | 
| character_set_database | gbk | 
| character_set_filesystem | binary | 
| character_set_results | gbk | 
| character_set_server | gbk | 
| character_set_system | utf8 | 
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ | 
+--------------------------+----------------------------------------+ 

在查詢結果中可以看到mysql 數據庫系統中客戶端、數據庫連接、數據庫、文件系統、查詢 
結果、服務器、系統的字符集設置 
在這里,文件系統字符集是固定的,系統、服務器的字符集在安裝時確定,與亂碼問題無關 
亂碼的問題與客戶端、數據庫連接、數據庫、查詢結果的字符集設置有關 
*注:客戶端是看訪問mysql 數據庫的方式,通過命令行訪問,命令行窗口就是客戶端,通 
過JDBC 等連接訪問,程序就是客戶端 
我們在向mysql 寫入中文數據時,在客戶端、數據庫連接、寫入數據庫時分別要進行編碼轉 
換 
在執行查詢時,在返回結果、數據庫連接、客戶端分別進行編碼轉換 
現在我們應該清楚,亂碼發生在數據庫、客戶端、查詢結果以及數據庫連接這其中一個或多 
個環節 
接下來我們來解決這個問題 
在登錄數據庫時,我們用mysql --default-character-set=字符集-u root -p 進行連接,這時我們 
再用show variables like '%char%';命令查看字符集設置情況,可以發現客戶端、數據庫連接、 
查詢結果的字符集已經設置成登錄時選擇的字符集了 
如果是已經登錄了,可以使用set names 字符集;命令來實現上述效果,等同于下面的命令: 
set character_set_client = 字符集 
set character_set_connection = 字符集 
set character_set_results = 字符集 
如果是通過JDBC 連接數據庫,可以這樣寫URL: 
URL=jdbc:mysql://localhost:3306/abs?useUnicode=true&characterEncoding=字符集 
JSP 頁面等終端也要設置相應的字符集 
數據庫的字符集可以修改mysql 的啟動配置來指定字符集,也可以在create database 時加上 
default character set 字符集來強制設置database 的字符集 
通過這樣的設置,整個數據寫入讀出流程中都統一了字符集,就不會出現亂碼了 
為什么從命令行直接寫入中文不設置也不會出現亂碼? 
可以明確的是從命令行下,客戶端、數據庫連接、查詢結果的字符集設置沒有變化 
輸入的中文經過一系列轉碼又轉回初始的字符集,我們查看到的當然不是亂碼 
但這并不代表中文在數據庫里被正確作為中文字符存儲 
舉例來說,現在有一個utf8 編碼數據庫,客戶端連接使用GBK 編碼,connection 使用默認 
的ISO8859-1(也就是mysql 中的latin1),我們在客戶端發送“中文”這個字符串,客戶端 
將發送一串GBK 格式的二進制碼給connection 層,connection 層以ISO8859-1 格式將這段 
二進制碼發送給數據庫,數據庫將這段編碼以utf8 格式存儲下來,我們將這個字段以utf8 
格式讀取出來,肯定是得到亂碼,也就是說中文數據在寫入數據庫時是以亂碼形式存儲的, 
在同一個客戶端進行查詢操作時,做了一套和寫入時相反的操作,錯誤的utf8 格式二進制 
碼又被轉換成正確的GBK 碼并正確顯示出來。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: av在线播放亚洲 | 在线成人一区二区 | 欧美黑人xx | 久久爽精品区穿丝袜 | 九九热九九热 | 视频一区二区三区在线观看 | 亚洲第一成人在线观看 | 性盈盈盈影院 | 中文字幕精品亚洲 | 国产女做a爱免费视频 | 中文字幕在线观看亚洲 | 日韩视频在线观看免费视频 | 免费观看一级淫片 | 欧美一区二区网站 | 国产成人午夜精品 | 国产精品中文在线 | 性高跟鞋xxxxhd4kvideos | 欧美三级美国一级 | 国产成人精品一区二区三区电影 | 毛片在线视频观看 | 欧美性受xxx黑人xyx性爽 | 国产精选久久 | 久久9色 | 久久99精品久久久久久小说 | 最新影院| 成人午夜免费看 | 亚洲免费看片网站 | 中文字幕在线永久视频 | 精品国产精品久久 | 久久午夜神器 | 成人青青草 | 精品一区二区三区免费 | 久久福利精品 | 亚洲第一色婷婷 | 精品一区二区6 | 亚洲精品欧美二区三区中文字幕 | 免费黄色欧美视频 | 香蕉国产在线视频 | 一分钟免费观看完整版电影 | 国产精品久久久久久影视 | 国产成人精品网站 |