A.11 MySQL 8.4 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. Почему интерфейс GUI или браузер отображают символы CJK неправильно в моём приложении, использующем Access, PHP или другой API?
- A.11.10. Я обновился до MySQL 8.4. Как я могу вернуть поведение 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 8.4. Как я могу вернуть поведение, подобное 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.