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

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

[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.

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

8 ответов

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

У меня была та же проблема, которую я мог воспроизвести, просто обновив 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), и проблема ушла.

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

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

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

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

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

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

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

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

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

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

Получил ту же проблему. Можно ли конвертировать символы перед вставкой в ​​базу данных 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

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

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

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

Это похоже на известную ошибку. Вот проблема ошибок MySQL.

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

Другие вопросы по тегам