為什么需要cp932?
在MySQL中,sjis字符集對應于由IANA定義的Shift_JIS字符集,它支持JIS X0201和JIS X0208字符。(見 http://www.iana.org/assignments/character-sets。)
但是,“SHIFT JIS”作為描述性術語的含義變得非常含糊不清,并且它常常包括由不同供應商定義的Shift_JIS擴展部分。
例如,使用在日本Windows環境中使用的“SHIFT JIS”是Microsoft對Shift_JIS的Microsoft擴展,它的準確名字是Microsoft Windows Codepage: 932或cp932。除由Shift_JIS支持的字符之外,cp932支持擴展字符,如NEC選擇的IBM擴展字符和IBM擴展字符。
許多日本用戶在使用這些擴展字符過程中碰到過一些問題。這些問題是由于以下情況引起的:
· MySQL自動轉換字符集。
· 字符集通過Unicode轉換(ucs2)。
· sjis字符集不支持這些擴展字符轉換。
· 從號稱“SHIFT JIS”到Unicode的轉換,存在一些轉換規則,并且一些字符轉換到Unicode依賴不同的轉換規則。MySQL僅支持這些轉換規則中的一種(在后面描述)。
MySQLcp932字符集可以解決這些轉換問題。
因為MySQL支持字符集轉換,將IANA Shift_JIS 和 cp932分離為兩種不同字符集是重要的,因為它們提供不同的轉換規則。
cp932與sjis有什么不同?
cp932字符集與sjis存在以下不同點:
· cp932支持NEC特殊字符、NEC選擇的IBM擴展字符和IBM選擇的字符。
· 一些cp932字符有兩個不同的編碼點,這兩種編碼點轉換為相同Unicode編碼點。因此,當從Unicode轉換回到cp932時,必須選擇一個編碼點。對于這種“相互轉換”,使用由Microsoft推薦的轉換規則。(見 http://support.microsoft.com/kb/170559/EN-US/。)
轉換規則如下:
o 如果字符在JIS X 0208 和NEC特殊字符中同時存在,使用JIS X 0208 的編碼點。
o 如果字符在NEC特殊字符和IBM選擇的字符中同時存在,使用NEC特殊字符的編碼點。
o 如果字符在IBM選擇的字符和NEC選擇的IBM擴展字符中同時存在,使用IBM擴展字符的編碼點。
關于cp932字符的Unicode 值的列表顯示信息見http://www.microsoft.com/globaldev/reference/dbcs/932.htm。對于cp932表中的帶有下面有四位數字出現的字符的實體,數字代表相應的Unicode(ucs2)編碼。對于表中有兩個帶下劃線的數字出現的實體,擇有一個以那兩個數字開頭的cp932字符值的范圍。點擊一個這種表的實體,將帶你到一個頁,該頁顯示每個以那些數字開頭的cp932字符的Unicode值。
以下連接很重要。它們與下列字符集的編碼相對應:
o NEC特殊字符:
http://www.microsoft.com/globaldev/reference/dbcs/932/932_87.htm
o NEC選擇的IBM擴展字符:
o http://www.microsoft.com/globaldev/reference/dbcs/932/932_ED.htm
o http://www.microsoft.com/globaldev/reference/dbcs/932/932_EE.htm
o IBM選擇的字符:
o http://www.microsoft.com/globaldev/reference/dbcs/932/932_FA.htm
o http://www.microsoft.com/globaldev/reference/dbcs/932/932_FB.htm
o http://www.microsoft.com/globaldev/reference/dbcs/932/932_FC.htm
· cp932與eucjpms結合支持用戶自定義字符的轉換,并且解決sjis/ujis轉換問題。詳細信息,請參見http://www.opengroup.or.jp/jvc/cde/sjis-euc-e.html。
· 對于一些字符,與ucs2之間的轉換與sjis和cp932之間的轉換是不同的。下表舉例說明了這些不同。
轉換到ucs2:
sjis/cp932值 |
sjis→ ucs2轉換 |
cp932 → ucs2轉換 |
5C |
005C |
005C |
7E |
007E |
007E |
815C |
2015 |
2015 |
815F |
005C |
FF3C |
8160 |
301C |
FF5E |
8161 |
2016 |
2225 |
817C |
2212 |
FF0D |
8191 |
00a2 |
FFE0 |
8192 |
00a3 |
FFE1 |
81Ca |
00aC |
FFE2 |
從ucs2轉換:
ucs2值 |
ucs2 → sjis轉換 |
ucs2 → cp932轉換 |
005C |
815F |
5C |
007E |
7E |
7E |
00a2 |
8191 |
3F |
00a3 |
8192 |
3F |
00aC |
81Ca |
3F |
2015 |
815C |
815C |
2016 |
8161 |
3F |
2212 |
817C |
3F |
2225 |
3F |
8161 |
301C |
8160 |
3F |
FF0D |
3F |
817C |
FF3C |
3F |
815F |
FF5E |
3F |
8160 |
FFE0 |
3F |
8191 |
FFE1 |
3F |
8192 |
FFE2 |
3F |
81Ca |