2009-12-11 8 views
4

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

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

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

+0

@ пользователь251724: ваша ссылка устарела. Сайт не найден. – luiscolorado

ответ

1

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

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

1

От documentation:

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

7

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

+0

Комментарий анонимного пользователя, предложенный как изменение: Char set 'utf8mb4', похоже, не поддерживается в MySQL v5.1. – StuartLC

+0

+1 Благодарим вас за эту GEM находки. Это была одна из тех находок, которые вы знаете, но вам нужно всего несколько дней. KUDOS. Драйвер разбился на этот текст: «эксцентричность [ˌɛksɛntrɪsɪtɪ] n pltyties», которая была частью описания словаря для слова «эксцентриситет». Казалось, что он падает прямо в точке после правой скобки или первого нечетного символа после точки. –

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

  2. Force скопировать

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

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

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

  6. Копирование данных в SQLServer от новой таблицы в MySQL

0

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

Решил его, установив кодировку «utf8» непосредственно в настройках драйвера MySQL ODBC на вкладке «Дополнительно» внизу. Это помогает, но строка прерывается, если я использую специальные символы в Германии, такие как «ö» или «ü». Я не мог найти решение этой проблемы, поэтому я написал простую MS-SQL-Server-функцию, которая преобразует эти символы. –

2

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

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^