Spec-Zone.ru › MySQL 5.7

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):

      https://msdn.microsoft.com/en-us/goglobal/gg674964
      
    • Выбранные символы NEC — расширенные символы IBM (старший байт 0xED и 0xEE):

      https://msdn.microsoft.com/en-us/goglobal/gg671837
      https://msdn.microsoft.com/en-us/goglobal/gg671838
      
    • Выбранные символы IBM (старший байт 0xFA, 0xFB, 0xFC):

      https://msdn.microsoft.com/en-us/goglobal/gg671839
      https://msdn.microsoft.com/en-us/goglobal/gg671840
      https://msdn.microsoft.com/en-us/goglobal/gg671841
      
  • 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/charset-cp932.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API