字元集概述
字元集是一套符號和編碼的規則,不論是在oracle資料庫還是在mysql資料庫,都存在字元集的選擇問題,而且如果在資料庫建立階段沒有正確選擇字元集,那麼可能在後期需要更換字元集,而字元集的更換是代價比較高的操作,也存在一定的風險,所以,我們建議在應用開始階段,就按照需求正確的選擇合適的字元集,避免後期不必要的調整。
4.2 Mysql支援的字元集簡介
mysql伺服器可以支援多種字元集(可以用show character set指令查看所有mysql支援的字元集) ,在同一台伺服器、同一個資料庫、甚至是同一個資料表的不同欄位都可以指定使用不同的字元集,相較於oracle等其他資料庫管理系統,在同一個資料庫只能使用相同的字元集,mysql明顯有較大的彈性。
mysql的字元集包括字元集(CHARACTER)和校對規則(COLLATION)兩個概念。字元集是用來定義mysql儲存字串的方式,校對規則則是定義了比較字串的方式。字元集和校對規則是一對多的關係, MySQL支援30多位元組的70多種校對規則。
每個字元集至少對應一個校對規則。 可以用SHOW COLLATION LIKE 'utf8%';指令查看相關字元集的校對規則。
4.3 Unicode簡述
Unicode是一種編碼規範。我們在這裡簡述一下Unicode編碼產生的歷史。
先從ASCII碼說起,ASCII碼也是一種編碼規範,只不過ASCII碼只能最多表示256個字符,是針對英文產生的,而面對中文、阿拉伯文之類的複雜文字,256個字符顯然是不夠用的。於是各國或組織都相繼制定了符合自己語言文字的標準,像是 gb2312、big5等等。但是這種各自製定自己的標準的做法顯然是有很多弊端的,於是Unicode編碼規範應運而生。
Unicode也是一種字元編碼方法,不過它是由國際組織設計,可以容納全世界所有語言文字的編碼方案。 Unicode的學名是"Universal Multiple-Octet Coded Character Set",簡稱為UCS。 UCS可以看成是"Unicode Character Set"的縮寫。
Unicode有兩套標準UCS-2和UCS-4,前者用2個位元組表示一個字符,後者用4個字表示一個字符。以目前常用的 UCS-2為例,它可以表示的字元數為 2^16=65535,基本上可以容納所有的歐美字元和絕大多數亞洲字元。
4.4 怎樣選擇合適的字符集
我們建議在能夠完全滿足應用的前提下,盡量使用小的字符集。因為較小的字元集意味著能夠節省空間、減少網路傳輸位元組數,同時由於儲存空間的較小間接的提高了系統的性
能。
有很多字元集可以保存漢字,像是utf8、gb2312、gbk、latin1等等,但常用的是gb2312和gbk。因為gb2312字庫比gbk字庫小,有些偏僻字(例如:洺)不能保存,因此在選擇字符集的時候一定要權衡這些偏僻字在應用出現的幾率以及造成的影響, 不能做出肯定答复的話最好選用gbk。
4.5 Mysql字元集的設定
mysql的字元集和校對規則有4個等級的預設設定:伺服器級、資料庫級、表格級和欄位級。分別在不同的地方設置,作用也不相同。
伺服器字元集和校對,在mysql服務啟動的時候確定。
可以在my.cnf中設定:
[mysqld]
default-character-set=utf8
或在啟動選項中指定:
mysqld --default-character-set=utf8
或是在編譯的時候指定:
. /configure --with-charset=utf8
如果沒有特別的指定伺服器字元集,預設使用latin1作為伺服器字元集。上面三種設定的方式都只指定了字元集,沒有指定校對規則,這樣是使用該字元集預設的校對規則,如果要使用該字元集的非預設校對規則,則需要在指定字元集的同時指定校對規則。
可以用 show variables like 'character_set_server';指令查詢目前伺服器的字元集和校對規則。
更多相關文章請關注php中文網(www.php.cn)!