4

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 列が含まれます。

誰でもこの問題に光を当てることができますか?

4

8 に答える 8

7

MySQL で 4 バイトの UTF-8 文字 (通常は UTF-8 の一部と見なされます) をサポートする必要がある場合は、utf8 ではなく文字セット utf8mb4 を使用する必要があります。utf8mb4 は、MySQL 5.5.3 で初めてサポートされました。

于 2012-07-26T15:30:03.107 に答える
2

char(1)SQL 2008 上のリンク サーバー上の単一行の列を MySQL 5.1 DB に更新するだけで再現できる同じ問題がありました。

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

このエラーは、新しく構築されたサーバーで発生していました。同じコードが正常に機能する別のマシンで同様のセットアップを行いました。唯一の違いは、MySQL ODBC ドライバーのバージョンでした。新しいサーバーでは 5.2.2 でした。古い(稼働中の)サーバーでは、5.1.8です(現在サポートされていません)。

以前のバージョンの ODBC ドライバー (v5.1.11) をダウンロードしてインストールしたところ、問題は解決しました。

于 2012-12-18T19:21:46.793 に答える
1
  1. MySQL を 5.5.3 に更新し、列のエンコードに utf8mb4 を使用します。

  2. 強制コピー

  3. コピーする必要があるテーブルと同じ構造を持つ新しいテーブルを SQLServer に作成します

  4. 新しいテーブルの列 nvarchar(size) -> varchar(size x 2) を変更します

  5. データを新しいテーブルにコピーします

  6. SQLServer のデータを新しいテーブルから MySQL にコピーします

于 2012-09-20T09:02:57.837 に答える
1

「4 バイトでエンコードされた UTF-8 文字」とは、コード ポイントを持つ文字> 0xFFFF、つまり、コード ポイントが 16 ビットに収まらない (基本多言語面(BMP) の外にある) 文字を指します。古いシステムの多くは、BMP 以外の文字をサポートしていません。

BMP 外の文字は、通常、CJK 文字です。それがあなたの場合かどうかはわかりません。:-)

于 2009-12-11T20:33:48.537 に答える
1

ドキュメントから:

現在、MySQL の UTF-8 サポートには 4 バイト シーケンスが含まれていません。(UTF-8 エンコーディングの古い標準は RFC 2279 で規定されており、1 ~ 6 バイトの UTF-8 シーケンスが記述されています。RFC 3629 は RFC 2279 を廃止します。このため、5 バイトと 6 バイトのシーケンスは使用されなくなりました。 .)

于 2009-12-11T20:35:09.390 に答える
0

同じ問題が発生しました。mysql データベースに挿入する前に文字を変換することは可能ですか?

リモート Web サーバーに 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
于 2012-12-04T18:08:47.393 に答える
0

既知のバグのようです。これはMySQLのバグに関する問題です。

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

于 2013-09-05T22:26:29.450 に答える