Сервер Mysql не поддерживает 4-байтовые закодированные символы utf8

Я получил сообщение об ошибке сервера при запуске компонента передачи данных с сервера Sql на базу данных MySql. Сообщение об ошибке выглядит следующим образом:

[MySql][ODBC 5.1 Driver][mysqld-5.0.67-community-nt-log]Server does not support 4-byte encoded UTF8 characters.

Исходная таблица Sql Server содержит столбцы nvarchar, целевая таблица MySql содержит столбцы varchar.

Кто-нибудь может пролить свет на эту проблему?


person YB.    schedule 11.12.2009    source источник
comment
@ user251724: ваша ссылка устарела. Сайт не найден.   -  person luiscolorado    schedule 06.03.2012


Ответы (8)


Если вам нужно, чтобы MySQL поддерживал 4-байтовые символы UTF-8 (которые обычно считаются частью UTF-8), вам нужно использовать набор символов utf8mb4, а не utf8. utf8mb4 впервые был поддержан в MySQL 5.5.3.

person prosfilaes    schedule 26.07.2012
comment
Комментарий анонимного пользователя, предложенный в качестве редактирования: Набор символов «utf8mb4», похоже, не поддерживается в MySQL v5.1. - person StuartLC; 29.07.2012
comment
+1 Спасибо за эту GEM находку. Это была одна из тех находок, о которых вы знаете, но вам нужно несколько дней, чтобы найти их. ПРЕКРАСНОСТЬ. Водитель разбился на этом тексте, eccentricity [ˌɛksɛnˈtrɪsɪtɪ] n pl -ties, который был частью словарного описания слова eccentricity. Казалось, он вылетает прямо в точку после правой скобки или первого нечетного символа после точки. - person Rich Bianco; 17.09.2014

У меня была та же проблема, которую я мог воспроизвести, просто обновив столбец char(1) для одной строки на связанном сервере в SQL 2008 до базы данных MySQL 5.1:

update linked_server_name...table_name set status = 'c' where id = 1;

Эта ошибка возникала на недавно построенном сервере. У меня была аналогичная установка на другой машине, где тот же код работал нормально. Единственным отличием была версия драйвера MySQL ODBC: на новом сервере она была 5.2.2; на старом (рабочем) сервере 5.1.8 (сейчас не поддерживается).

Я скачал и установил предыдущую версию драйвера ODBC (v5.1.11), и проблема исчезла.

person dbscissors    schedule 18.12.2012

"4-байтовые закодированные символы UTF-8" относятся к символам с кодовой точкой > 0xFFFF, т. е. тем, чьи кодовые точки не умещаются в пределах 16 бит (находятся за пределами базовой многоязычной плоскости (BMP)). Многие старые системы не поддерживают символы вне BMP.

Символы вне BMP обычно являются символами CJK; Я не знаю, так ли это с вами здесь. :-)

person Chris Jester-Young    schedule 11.12.2009

Из документации:

В настоящее время поддержка MySQL для UTF-8 не включает четырехбайтовые последовательности. (Старый стандарт кодировки UTF-8 представлен в RFC 2279, в котором описываются последовательности UTF-8, занимающие от одного до шести байтов. RFC 3629 делает RFC 2279 устаревшим; по этой причине последовательности из пяти и шести байтов больше не используются. .)

person wallyk    schedule 11.12.2009

  1. Обновите MySQL до версии 5.5.3 и используйте utf8mb4 для кодирования столбцов.

  2. Принудительное копирование

  3. Создайте новую таблицу в SQLServer с той же структурой, что и таблица, которую нужно скопировать.

  4. Измените столбец новой таблицы nvarchar (размер) -> varchar (размер x 2)

  5. Скопируйте данные в новую таблицу

  6. Скопируйте данные SQLServer из новой таблицы в MySQL.

person shootsoft    schedule 20.09.2012

Получил ту же проблему. Можно ли преобразовать символы перед вставкой в ​​​​базу данных mysql?

У меня есть база данных MySQL на удаленном веб-сервере, ничего особенного. Теперь я использую драйвер ODBC для подключения удаленной базы данных MySQL к моему локальному MS SQL Server 2008. Это прекрасно работает, но когда я пытаюсь вставить строковые значения из MSSQL, возникает ошибка. С числами (int) работает отлично.

Синтаксис выглядит так

INSERT INTO OPENQUERY(
   MYSQL, 
   'SELECT Adresse, Mandant, Matchcode FROM   usr_p171552_2.Adressen' 
) SELECT Adresse, Mandant, Matchcode FROM Adressen

Хорошо.

Я ищу что-то вроде

INSERT INTO OPENQUERY(
    MYSQL, 
    'SELECT Adresse, Mandant, Matchcode FROM usr_p171552_2.KHKAdressen' 
) SELECT Adresse, Mandant, Matchcode FROM KHKAdressen CONVERTTOCHARSET compatiblecharset
person Stefan Brendle    schedule 04.12.2012
comment
Решил это, установив кодировку utf8 непосредственно в настройках драйвера MySQL ODBC на вкладке «Дополнительно» внизу. Это помогает, но строка обрывается, если я использую специальные немецкие символы, такие как ö или ü. Я не смог найти решение этой проблемы, поэтому написал простую функцию MS-SQL-Server, которая преобразует эти символы. - person Stefan Brendle; 21.01.2013

Похоже на известный баг. Вот проблема с ошибками MySQL.

http://bugs.mysql.com/bug.php?id=67428

person Shannon Looper    schedule 05.09.2013

Я получал это сообщение об ошибке с 1 клиентским компьютером, выполняющим соединение ODBC для извлечения данных в электронную таблицу Excel. Несколько других машин могли без проблем обновить эту же таблицу.

Немного поискав, я ничего не нашел, поэтому начал экспериментировать. Соединение ODBC было настроено с помощью драйвера Unicode для MySQL. Я воссоздал соединение с помощью драйвера ANSI, и оно отлично работает.

Надеюсь, это поможет кому-то другому.

person DaveNOk    schedule 12.12.2014