Spec-Zone.ru › MySQL Connectors 1.0

6.7 Использование наборов символов и Unicode

Все строки, отправляемые драйвером JDBC на сервер, автоматически преобразуются из собственного формата Java Unicode в кодировку символов соединения, включая все запросы, отправленные с помощью Statement.execute(), Statement.executeUpdate() и Statement.executeQuery(), а также все PreparedStatement и CallableStatement параметры, за исключением параметров, установленных с помощью следующих методов:

  • setBlob()

  • setBytes()

  • setClob()

  • setNClob()

  • setAsciiStream()

  • setBinaryStream()

  • setCharacterStream()

  • setNCharacterStream()

  • setUnicodeStream()

Количество кодировок на соединение

Connector/J поддерживает один набор символов между клиентом и сервером и любое количество наборов символов для данных, возвращаемых сервером клиенту в ResultSets.

Установка кодировки символов

Для Connector/J 8.0.25 и ранее: Кодировка символов между клиентом и сервером автоматически определяется при подключении (при условии, что свойства подключения Connector/J characterEncoding и connectionCollation не установлены). Кодировка на сервере задается с помощью системной переменной (подробнее см. ), и драйвер автоматически использует эту кодировку. Например, чтобы использовать с Connector/J, настройте сервер MySQL с , и оставьте characterEncoding и connectionCollation вне строки подключения Connector/J. Connector/J затем автоматически определит UTF-8. Чтобы переопределить автоматически обнаруженную кодировку на стороне клиента, используйте свойство characterEncoding в URL-адресе подключения к серверу.

Для Connector/J 8.0.26 и более поздних версий: Существует две фазы во время инициализации соединения, в которых устанавливаются кодировка символов и сортировка.

  • Предварительная фаза аутентификации: На этой фазе кодировка символов между клиентом и сервером определяется настройками свойств подключения Connector/J в порядке приоритета:

    • passwordCharacterEncoding

    • connectionCollation

    • characterEncoding

    • Установлено значение UTF8 (соответствует utf8mb4 на серверах MySQL), если ни одно из вышеперечисленных свойств не задано

  • Фаза после аутентификации: На этой фазе кодировка символов между клиентом и сервером для остальной части сеанса определяется настройками свойств подключения Connector/J в порядке приоритета:

    • connectionCollation

    • characterEncoding

    • Установлено значение UTF8 (соответствует utf8mb4 на серверах MySQL), если ни одно из вышеперечисленных свойств не задано

    Это означает, что Connector/J должен выдать для изменения набора символов и сортировки, установленных на фазе предварительной аутентификации, только если passwordCharacterEncoding установлено, но его значение отличается от значения connectionCollation, или отличается от значения characterEncoding (когда connectionCollation не установлено), или отличается от utf8mb4 (когда оба connectionCollation и characterEncoding не установлены).

Настраиваемые наборы символов и сортировки

Чтобы поддержать использование настраиваемых наборов символов и сортировок на сервере, установите свойство подключения Connector/J detectCustomCollations в значение true, и предоставьте отображение между настраиваемыми наборами символов и кодировками символов Java, указав свойство подключения customCharsetMapping со списком пар custom_charset:java_encoding, разделенных запятыми (например: customCharsetMapping=charset1:UTF-8,charset2:Cp1252).

Преобразования имен кодировок MySQL в Java

Используйте имена в стиле Java при указании кодировок символов. В следующей таблице перечислены имена наборов символов MySQL и соответствующие имена в стиле Java:

Таблица 6.21 Преобразования имен кодировок MySQL в Java

Таблица 6.21 Преобразования имен кодировок MySQL в Java
Имя набора символов MySQL Имя кодировки символов в стиле Java
ascii US-ASCII
big5 Big5
gbk GBK
sjis SJIS or Cp932
cp932 Cp932 or MS932
gb2312 EUC_CN
ujis EUC_JP
euckr EUC_KR
latin1 Cp1252
latin2 ISO8859_2
greek ISO8859_7
hebrew ISO8859_8
cp866 Cp866
tis620 TIS620
cp1250 Cp1250
cp1251 Cp1251
cp1257 Cp1257
macroman MacRoman
macce MacCentralEurope
utf8mb4 UTF-8
ucs2 UnicodeBig

Примечания
  • Когда UTF-8 используется для characterEncoding в строке подключения, он отображается в имени набора символов MySQL utf8mb4.

  • Если параметр подключения connectionCollation также установлен наряду с characterEncoding и несовместим с ним, characterEncoding будет переопределен кодировкой, соответствующей connectionCollation.

  • Поскольку нет имени набора символов в стиле Java для utfmb3, которое можно использовать с параметром подключения charaterEncoding, единственный способ использовать utf8mb3 в качестве набора символов подключения — использовать сортировку utf8mb3 (например, utf8_general_ci) для параметра подключения connectionCollation, что принудительно заставляет использовать набор символов utf8mb3, как объясняется в последнем пункте.

Предупреждение

Не отправляйте запрос с Connector/J, так как драйвер не обнаружит, что набор символов был изменён запросом, и продолжит использовать набор символов, настроенный при первом подключении.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-j-en/connector-j-reference-charsets.html

Spec-Zone.ru

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