我收到了从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列。
有人可以解释这个问题吗?
答案 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)
目前,MySQL支持UTF-8 不包括四字节序列。 (UTF-8编码的旧标准 由RFC 2279给出,其描述 UTF-8序列从一个到 六个字节。 RFC 3629呈现RFC 2279 过时的;因此,序列 不再有五个和六个字节 使用。)
答案 4 :(得分:1)
将MySQL更新为5.5.3并使用utf8mb4进行列编码。
强制复制
在SQLServer中创建一个新表,其结构与您需要复制的表相同
更改新表的列nvarchar(大小) - > varchar(size x 2)
将数据复制到新表
将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错误的问题。
答案 7 :(得分:0)
我收到此错误消息,其中1台客户端计算机建立ODBC连接以将数据提取到Excel电子表格中。其他几台机器可以毫无困难地更新同一个电子表格。
经过一番搜索后,我什么也没找到,所以开始尝试了。 ODBC连接是使用MySQL unicode驱动程序设置的。我使用ANSI驱动程序重新创建了连接,它工作正常。
希望这有助于其他人。