10.10.7.1 Набор символов cp932
Зачем нужен cp932?
В MySQL набор символов sjis соответствует набору символов Shift_JIS, определённому IANA, который поддерживает символы JIS X0201 и JIS X0208. (См. http://www.iana.org/assignments/character-sets.)
Однако, значение “SHIFT JIS” как описательного термина стало очень расплывчатым, и оно часто включает расширения к Shift_JIS, определённые различными поставщиками.
Например, “SHIFT JIS”, используемый в японских средах Windows, представляет собой расширение от Microsoft набора Shift_JIS, и его точное название — Microsoft Windows Codepage : 932 или cp932. В дополнение к символам, поддерживаемым Shift_JIS, cp932 поддерживает расширенные символы, такие как специальные символы NEC, выбранные символы NEC — расширенные символы IBM и выбранные символы IBM.
Многие японские пользователи сталкивались с проблемами при использовании этих расширенных символов. Эти проблемы связаны со следующими факторами:
MySQL автоматически преобразует наборы символов.
Преобразование наборов символов выполняется с использованием Unicode (
ucs2).Набор символов
sjisне поддерживает преобразование этих расширенных символов.Существует несколько правил преобразования от так называемого “SHIFT JIS” к Unicode, и некоторые символы преобразуются в Unicode по-разному в зависимости от правила преобразования. MySQL поддерживает только одно из этих правил (описанное позже).
Набор символов MySQL cp932 разработан для решения этих проблем.
Поскольку 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/.)Правило преобразования работает следующим образом:
Если символ присутствует как в JIS X 0208, так и в специальных символах NEC, используйте кодовое значение из JIS X 0208.
Если символ присутствует как в специальных символах NEC, так и в выбранных символах IBM, используйте кодовое значение из специальных символов NEC.
Если символ присутствует как в выбранных символах IBM, так и в выбранных расширенных символах NEC—IBM, используйте кодовое значение из расширенных символов IBM.
Таблица, представленная по адресу https://msdn.microsoft.com/en-us/goglobal/cc305152.aspx, предоставляет информацию о значениях Unicode символов
cp932. Для записей в таблицеcp932, где присутствует четырёхзначное число, это число представляет соответствующее кодирование Unicode (ucs2). Для записей в таблице с подчеркнутым двузначным значением существует диапазон значений символовcp932, которые начинаются с этих двух цифр. Щелчок по такой записи в таблице перенаправит вас на страницу, где отображается значение Unicode для каждого из символовcp932, которые начинаются с этих цифр.Следующие ссылки представляют особый интерес. Они соответствуют кодировкам для следующих наборов символов:
-
Специальные символы NEC (старший байт
0x87): -
Выбранные символы NEC — расширенные символы IBM (старший байт
0xEDи0xEE): -
Выбранные символы IBM (старший байт
0xFA,0xFB,0xFC):
cp932поддерживает преобразование пользовательских символов в сочетании сeucjpmsи решает проблемы с преобразованиемsjis/ujis. Для получения подробностей обратитесь к http://www.sljfaq.org/afaq/encodings.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 |
Пользователи любых японских наборов символов должны быть осведомлены о том, что использование --character-set-client-handshake (или --skip-character-set-client-handshake) имеет важное значение. См. Раздел 5.1.6, «Параметры командного сервера».
© 2025 Oracle
Licensed under the GPLv2 License.