一:背景
對於mysql資料庫儲存來說,選擇合適的字符集也是非常重要的,否則的話,可能就會造成亂碼等。
二:字符集介紹
2.1字符集概述
字符集是一套符號和編碼的規則,不論是在oracle資料庫還是在mysql資料庫,都
存在字符集的選擇問題,而且如果在資料庫建立階段沒有正確選擇字符集,那麼可能在後期
需要更換字符集,而字符集的更換是代價比較高的操作,也存在一定的風險,所以,我們推
薦在應用開始階段,就按照需求正確的選擇合適的字符集,避免後期不必要的調整。
2.2mysql支援的字符集簡介
mysql伺服器可以支援多種字符集(可以用showcharacterset命令檢視所有mysql支援
的字符集),在同一臺伺服器、同乙個資料庫、甚至同乙個表的不同欄位都可以指定使用不
同的字符集,相比
oracle
等其他資料庫管理系統,在同乙個資料庫只能使用相同的字符集,
mysql
明顯存在更大的靈活性。
mysql
的字符集包括字符集(
character
)和校對規則(
collation
)兩個概念。字符集
用來定義
mysql
儲存字串的方式,校對規則則是定義了比較字串的方式。字符集和校
對規則是一對多的關係
,mysql
支援30
多種字符集的
70多種校對規則。
每個字符集至少對應乙個校對規則。可以用
showcollationlike'utf8%';
命令檢視相
關字符集的校對規則。
2.3unicode簡述
unicode是一種編碼規範。我們在這裡簡述一下unicode編碼產生的歷史。
先從ascii
碼說起,
ascii
碼也是一種編碼規範,只不過
ascii
碼只能最多表示
256個字元,是針對英文產生的,而面對中文、阿拉伯文之類的複雜文字,
256個字元顯然是不
夠用的。於是各個國家或組織都相繼制定了符合自己語言文字的標準,比如
gb2312
、big5
等等。但是這種各自制定自己的標準的做法顯然是有很多弊端的,於是
unicode
編碼規範應
運而生。
unicode也是一種字元編碼方法,不過它是由國際組織設計,可以容納全世界所有語言
文字的編碼方案。
unicode
的學名是
"universalmultiple-octetcodedcharacterset"
,簡稱為
ucs。
ucs可以看作是
"unicodecharacterset"
的縮寫。
unicode
有兩套標準
ucs-2
和ucs-4
,前者用
2個位元組表示乙個字元,後者用
4個位元組
表示乙個字元。以目前常用的
ucs-2
為例,它可以表示的字元數為
2^16=65535
,基本上可
以容納所有的歐美字元和絕大多數亞洲字元。
2.4怎樣選擇合適的字符集
我們建議在能夠完全滿足應用的前提下,盡量使用小的字符集。因為更小的字符集意
味著能夠節省空間、減少網路傳輸位元組數,同時由於儲存空間的較小間接的提高了系統的性
能。有很多字符集可以儲存漢字,比如
utf8
、gb2312
、gbk
、latin1
等等,但是常用的是
gb2312
和gbk
。因為gb2312
字型檔比gbk
字型檔小,有些偏僻字(例如:洺)不能儲存,因此
在選擇字符集的時候一定要權衡這些偏僻字在應用出現的機率以及造成的影響,不能做出肯
定答覆的話最好選用
gbk。
2.5mysql字符集的設定
mysql的字符集和校對規則有4個級別的預設設定:伺服器級、資料庫級、表級和字段
級。分別在不同的地方設定,作用也不相同。
伺服器字符集和校對,在
mysql
服務啟動的時候確定。
可以在my.cnf
中設定:
[mysqld]
default-character-set=utf8
或者在啟動選項中指定:
mysqld--default-character-set=utf8
或者在編譯的時候指定:
./configure--with-charset=utf8
如果沒有特別的指定伺服器字符集,預設使用latin1作為伺服器字符集。上面三種設
置的方式都只指定了字符集,沒有指定校對規則,這樣是使用該字符集預設的校對規則,如
果要使用該字符集的非預設校對規則,則需要在指定字符集的同時指定校對規則。
可以用showvariableslike'character_set_server';
命令查詢當前伺服器的字元
集和校對規則。
三:參考資料
網易技術部
mysql字符集 MySQL字符集選擇
一 怎樣選擇合適的字符集 對mysql資料庫來說,字符集很重要,因為資料庫儲存的資料大部分都是各種文字,字符集對資料庫的儲存,處理效能都會有所影響。主要考慮一下幾方面的因素 1.滿足應用支援語言的需求,應用處理各種各樣的文字,發布到使用不同語言的國家或地區,可以選擇unicode字符集,mysql的...
MYSQL字符集的選擇
字元 character 是各種文字和符號的總稱,包括各國家文字 標點符號 圖形符號 數字等。字符集 character set 是多個字元的集合,字符集種類較多,每個字符集包含的字元個數不同,常見字符集名稱 ascii字符集 gb2312字符集 big5字符集 gb18030字符集 unicode...
mysql 集群字符集 Mysql 字符集
字符集與字元比較 字符集字符集是某種字元的集合,比如最常見的ascii碼,由127個字元組成,只需要乙個位元組就能表示 我們常說的字符集還是gbk iso utf8 mysql 我們使用得最多的字符集就是gbk 和 utf8了 他們都是變長字符集,如果字元在ascii範圍內就使用乙個位元組表示,其他...