Mysql服务器不支持4字节编码的utf8字符

时间:2009-12-11 20:30:05

标签: mysql utf-8 character utf8mb4 astral-plane

我收到了从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 个答案:

答案 0 :(得分:7)

如果你需要MySQL支持4字节UTF-8字符(通常被认为是UTF-8的一部分),你需要使用字符集utf8mb4,而不是utf8。 MySQL 5.5.3首先支持utf8mb4。

答案 1 :(得分:2)

我遇到了同样的问题,只需将SQL 2008上链接服务器上的单行char(1)列更新为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),问题就消失了。

答案 2 :(得分:1)

“4字节编码的UTF-8字符”是指代码点为> 0xFFFF的字符,即代码点不适合16位的字符(在基本多语言平面之外(BMP))。许多旧系统不支持BMP之外的字符。

BMP以外的字符通常是CJK字符;我不知道你在这里是否属于这种情况。 : - )

答案 3 :(得分:1)

来自documentation

  

目前,MySQL支持UTF-8   不包括四字节序列。   (UTF-8编码的旧标准   由RFC 2279给出,其描述   UTF-8序列从一个到   六个字节。 RFC 3629呈现RFC 2279   过时的;因此,序列   不再有五个和六个字节   使用。)

答案 4 :(得分:1)

  1. 将MySQL更新为5.5.3并使用utf8mb4进行列编码。

  2. 强制复制

  3. 在SQLServer中创建一个新表,其结构与您需要复制的表相同

  4. 更改新表的列nvarchar(大小) - > varchar(size x 2)

  5. 将数据复制到新表

  6. 将SQLServer的数据从新表复制到MySQL

答案 5 :(得分: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

答案 6 :(得分:0)

它看起来像一个已知的错误。这是关于MySQL错误的问题。

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

答案 7 :(得分:0)

我收到此错误消息,其中1台客户端计算机建立ODBC连接以将数据提取到Excel电子表格中。其他几台机器可以毫无困难地更新同一个电子表格。

经过一番搜索后,我什么也没找到,所以开始尝试了。 ODBC连接是使用MySQL unicode驱动程序设置的。我使用ANSI驱动程序重新创建了连接,它工作正常。

希望这有助于其他人。