Spec-Zone.ru › MySQL 8.4

12.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, так и в выбранных расширенных символах IBM — NEC, используется код расширенных символов 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 Преобразование

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/charset-cp932.html

Spec-Zone.ru

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