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; Я не знаю, так ли это с тобой здесь.:-)
Обновите MySQL до 5.5.3 и используйте utf8mb4 для кодирования столбцов.
Принудительная копия
Создайте новую таблицу в SQLServer с той же структурой, что и таблицу, которую нужно скопировать.
Изменить новый столбец таблицы nvarchar(размер) -> varchar(размер x 2)
Скопируйте данные в новую таблицу
Скопируйте данные 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.