A.11 MySQL 9.2 FAQ: MySQL наборы символов для китайского, японского и корейского языков
Этот набор часто задаваемых вопросов составлен на основе опыта групп поддержки и разработки MySQL при обработке многочисленных запросов по вопросам наборов символов CJK (китайского, японского и корейского).
- A.11.1. Какие наборы символов CJK доступны в MySQL?
- A.11.2. Я вставил символы CJK в свою таблицу. Почему SELECT отображает их как символы «?»?
- A.11.3. Какие проблемы следует учитывать при работе с набором символов китайского языка Big5?
- A.11.4. Почему происходит сбой преобразования наборов символов японского языка?
- A.11.5. Что мне делать, если я хочу преобразовать SJIS 81CA в cp932?
- A.11.6. Как MySQL представляет знак йены (¥)?
- A.11.7. Какие проблемы следует учитывать при работе с корейскими наборами символов в MySQL?
- A.11.8. Почему возникают сообщения об ошибке «Incorrect string value»?
- A.11.9. Почему мое графическое приложение или браузер неправильно отображают символы CJK в моем приложении, использующем Access, PHP или другой API?
- A.11.10. Я обновился до MySQL 9.2. Как мне вернуть поведение MySQL 4.0 в отношении наборов символов?
- A.11.11. Почему некоторые запросы LIKE и FULLTEXT с символами CJK не работают?
- A.11.12. Как узнать, доступен ли символ X во всех наборах символов?
- A.11.13. Почему строки CJK сортируются неправильно в Unicode? (Часть I)
- A.11.14. Почему строки CJK сортируются неправильно в Unicode? (Часть II)
- A.11.15. Почему MySQL отклоняет мои дополнительные символы?
- A.11.16. Должно ли «CJK» быть «CJKV»?
- A.11.17. Разрешает ли MySQL использовать символы CJK в именах баз данных и таблиц?
- A.11.18. Где я могу найти переводы руководства MySQL на китайский, японский и корейский языки?
- A.11.19. Где я могу получить помощь по вопросам CJK и смежным темам в MySQL?
|
A.11.1. |
Какие наборы символов CJK доступны в MySQL? |
|
Список наборов символов CJK может варьироваться в зависимости от версии MySQL. Например, набор символов mysql> (Для получения дополнительной информации см. Раздел 28.3.4, «Таблица INFORMATION_SCHEMA CHARACTER_SETS».) MySQL поддерживает три варианта набора символов GB (Guojia Biaozhun, или Национальный стандарт, или Упрощённый китайский), которые являются официальными в КНР: Иногда люди пытаются вставить символы Здесь мы пытаемся уточнить, какие именно символы являются допустимыми в
Также возможно хранить символы CJK в наборах символов Unicode, хотя доступные сортировки могут не сортировать символы так, как вы ожидаете:
Используемая сортировка для набора символов Unicode определяет возможность сортировки (т. е. различения) символов в наборе:
Кроме того, различение символов не равнозначно их упорядочению в соответствии с обычаями данного языка CJK. В настоящее время MySQL имеет только одну сортировку UCA, специфичную для CJK, Сведения о сортировках Unicode и их различительных свойствах, включая свойства сортировки дополнительных символов, см. в Разделе 12.10.1, «Наборы символов Unicode». |
|
|
A.11.2. |
Я вставил символы CJK в свою таблицу. Почему |
|
Эта проблема обычно связана с настройкой MySQL, которая не соответствует настройкам приложения или операционной системы. Вот некоторые распространённые шаги для исправления таких проблем:
|
|
|
A.11.3. |
Какие проблемы следует учитывать при работе с набором символов Big5 для китайского языка? |
|
MySQL поддерживает кодировку символов Big5, которая распространена в Гонконге и Тайване (Китайская Республика). Кодировка символов MySQL Заявка на добавление расширений |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
A.11.4. |
Почему преобразования кодировок японских символов терпят неудачу? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MySQL поддерживает кодировки В следующей таблице преобразований столбец
Теперь рассмотрим следующую часть таблицы.
Это означает, что MySQL преобразует |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
A.11.5. |
Что мне следует сделать, если я хочу преобразовать SJIS |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Наш ответ: “?”. Это имеет недостатки, и многие предпочли бы «мягкое» преобразование, так что |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
A.11.6. |
Как MySQL представляет знак Иены ( |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Возникает проблема, потому что некоторые версии японских кодировок (как MySQL следует только одному варианту описания стандарта JIS (Японские промышленные стандарты). В MySQL, |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
A.11.7. |
Какие проблемы следует учитывать при работе с корейскими кодировками в MySQL? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Теоретически, хотя было несколько версий кодировки mysql> |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
A.11.8. |
Почему я получаю сообщения об ошибке «Неверное значение строки»? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Чтобы увидеть проблему, создайте таблицу с одним столбцом Unicode ( mysql> В режиме SQL без ограничений (nonstrict) попробуйте поместить редкий символ mysql> Операция mysql> Значит, это предупреждение относится только к столбцу mysql> SELECT ucs2,HEX(ucs2),gb2312,HEX(gb2312) FROM ch;
+-------+--------------+--------+-------------+
| ucs2 | HEX(ucs2) | gb2312 | HEX(gb2312) |
+-------+--------------+--------+-------------+
| A汌B | 00416C4C0042 | A?B | 413F42 |
+-------+--------------+--------+-------------+
Здесь нужно объяснить несколько моментов:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
A.11.9. |
Почему мой графический интерфейс или браузер отображает CJK-символы неправильно в моем приложении, использующем Access, PHP или другой API? |
|
Получите прямое подключение к серверу с помощью клиента mysql, и попробуйте тот же запрос там. Если mysql отвечает правильно, проблема может быть в том, что интерфейсу вашего приложения требуется инициализация. Используйте mysql, чтобы узнать, какой набор символов или наборы символов он использует с помощью оператора <%
Session.CodePage=0
Dim strConnection
Dim Conn
strConnection="driver={MySQL ODBC 3.51 Driver};server= Аналогично, если вы используете любой набор символов, кроме Если вы используете PHP, попробуйте следующее: <?php
$link = new mysqli($host, $usr, $pwd, $db);
if( mysqli_connect_errno() )
{
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$link->query("SET NAMES 'utf8'");
?>
В этом случае мы использовали Ещё одна проблема, часто встречающаяся в приложениях PHP, связана с предположениями, сделанными браузером. Иногда добавление или изменение тега Если вы используете Connector/J, см. . |
|
|
A.11.10. |
Я обновился до MySQL 9.2. Как я могу вернуться к поведению, как в MySQL 4.0, в отношении наборов символов? |
|
В MySQL версии 4.0 существовал один «глобальный» набор символов для сервера и клиента, и решение о том, какой набор символов использовать, принималось администратором сервера. Это изменилось начиная с MySQL версии 4.1. Теперь происходит «рукопожатие», как описано в Разделе 12.4, «Наборы символов и наборы сопоставления подключений»:
Это означает, что вы не можете управлять набором символов клиента, запуская mysqld с Например, предположим, что ваш любимый набор символов сервера — mysqld --character-set-server=latin1
А затем запустите клиент с набором символов по умолчанию mysql --default-character-set=utf8
Результирующие настройки можно увидеть, выведя вывод mysql> Теперь остановите клиента и сервер с помощью mysqladmin. Затем запустите сервер снова, но на этот раз скажите ему пропустить рукопожатие следующим образом: mysqld --character-set-server=utf8 --skip-character-set-client-handshake
Запустите клиент с mysql> Как вы можете видеть, сравнивая разные результаты от |
|
|
A.11.11. |
Почему некоторые поиска |
|
При поисках +-------------------------+---------------------------+
| OCTET_LENGTH(_utf8 'A') | OCTET_LENGTH(_utf8 'ペ') |
+-------------------------+---------------------------+
| 1 | 3 |
+-------------------------+---------------------------+
Если мы не знаем, где заканчивается первый символ в строке, мы не знаем, где начинается второй символ, в этом случае даже очень простые поиски, такие как Это одна из причин, по которой MySQL не может разрешить кодировки несуществующих символов. Если он не строго отвергает плохой ввод, он не может знать, где заканчиваются символы. Для |
|
|
A.11.12. |
Как я могу узнать, доступен ли символ |
|
Большая часть упрощённых китайских и основных неполуширинных японских кана встречается во всех наборах символов CJK. Следующая хранимая процедура принимает Unicode-символ DELIMITER //
CREATE PROCEDURE p_convert(ucs2_char CHAR(1) CHARACTER SET ucs2)
BEGIN
CREATE TABLE tj
(ucs2 CHAR(1) character set ucs2,
utf8 CHAR(1) character set utf8,
big5 CHAR(1) character set big5,
cp932 CHAR(1) character set cp932,
eucjpms CHAR(1) character set eucjpms,
euckr CHAR(1) character set euckr,
gb2312 CHAR(1) character set gb2312,
gbk CHAR(1) character set gbk,
sjis CHAR(1) character set sjis,
ujis CHAR(1) character set ujis);
INSERT INTO tj (ucs2) VALUES (ucs2_char);
UPDATE tj SET utf8=ucs2,
big5=ucs2,
cp932=ucs2,
eucjpms=ucs2,
euckr=ucs2,
gb2312=ucs2,
gbk=ucs2,
sjis=ucs2,
ujis=ucs2;
/* If there are conversion problems, UPDATE produces warnings. */
SELECT hex(ucs2) AS ucs2,
hex(utf8) AS utf8,
hex(big5) AS big5,
hex(cp932) AS cp932,
hex(eucjpms) AS eucjpms,
hex(euckr) AS euckr,
hex(gb2312) AS gb2312,
hex(gbk) AS gbk,
hex(sjis) AS sjis,
hex(ujis) AS ujis
FROM tj;
DROP TABLE tj;
END//
DELIMITER ;
Ввод может быть любым отдельным mysql> Поскольку ни одно из значений столбцов не равно |
|
|
A.11.13. |
Почему строки CJK сортируются неправильно в Unicode? (I) |
Проблемы сортировки CJK, которые возникали в более ранних версиях MySQL, могут быть решены в MySQL 8.0 путём использования набора символов |
|
|
A.11.14. |
Почему строки CJK сортируются неправильно в Unicode? (II) |
Проблемы сортировки CJK, которые возникали в более ранних версиях MySQL, могут быть решены в MySQL 8.0 путём использования набора символов |
|
A.11.15. |
Почему мои дополнительные символы отклоняются MySQL? |
|
Дополнительные символы лежат за пределами Unicode Основной многоязычной плоскости / Плоскости 0. Символы BMP имеют значения кодовых точек между Для хранения дополнительных символов необходимо использовать кодировку символов, которая их поддерживает:
|
|
|
A.11.16. |
Нужно ли заменить “CJK” на “CJKV”? |
|
Нет. Термин “CJKV” (Китайский Японский Корейский Вьетнамский) относится к вьетнамским наборам символов, которые содержат иероглифы (первоначально китайские). MySQL поддерживает современный вьетнамский алфавит с латинскими символами, но не поддерживает старый вьетнамский алфавит, использующий иероглифы. Начиная с MySQL 5.6, существуют вьетнамские наборы правил для наборов символов Unicode, как описано в Разделе 12.10.1, “Наборы символов Unicode”. |
|
|
A.11.17. |
Разрешает ли MySQL использовать символы CJK в именах баз данных и таблиц? |
Да. |
|
|
A.11.18. |
Где можно найти переводы руководства MySQL на китайский, японский и корейский языки? |
Японский перевод руководства MySQL 5.6 можно загрузить с https://dev.mysql.com/doc/. |
|
|
A.11.19. |
Где можно получить помощь по символам CJK и связанным вопросам в MySQL? |
|
Доступны следующие ресурсы:
|
© 2025 Oracle
Licensed under the GPLv2 License.