【问题标题】:Mysql server does not support 4-byte encoded utf8 charactersMysql 服务器不支持 4 字节编码的 utf8 字符
【发布时间】:2009-12-11 20:30:05
【问题描述】:

我收到了从 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 列。

谁能解释一下这个问题?

【问题讨论】:

  • @user251724 :您的链接已过时。未找到该网站。

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


【解决方案1】:

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

【讨论】:

  • 匿名用户的评论建议为编辑:MySQL v5.1 似乎不支持 Char set 'utf8mb4'。
  • +1 感谢您的发现。这是您知道的那些发现之一,但您需要几天时间才能找到。荣誉。司机撞毁了这段文字,“eccentricity [ˌɛksɛnˈtrɪsɪtɪ] n pl -ties”,这是字典中对 eccentricity 一词的描述的一部分。它似乎在右括号后的点或点后的第一个奇数字符处崩溃。
【解决方案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),问题就消失了。

【讨论】:

    【解决方案3】:

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

    BMP 之外的字符通常是 CJK 字符;不知道你这里是不是这样。 :-)

    【讨论】:

      【解决方案4】:

      来自documentation

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

      【讨论】:

        【解决方案5】:
        1. 将您的 MySQL 更新到 5.5.3 并使用 utf8mb4 进行列编码。

        2. 强制复制

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

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

        5. 将数据复制到新表中

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

        【讨论】:

          【解决方案6】:

          遇到同样的问题。插入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
          

          【讨论】:

          • 通过在底部“高级”选项卡的 MySQL ODBC 驱动程序设置中直接设置字符集“utf8”来解决它。这有帮助,但如果我使用像“ö”或“ü”这样的德语特殊字符,字符串会中断。我找不到这个问题的解决方案,所以我写了一个简单的 MS-SQL-Server-function 来转换这个字符。
          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

            我在 1 台客户端计算机建立 ODBC 连接以将数据拉入 Excel 电子表格时收到此错误消息。其他几台机器可以毫无问题地更新同一个电子表格。

            经过一番搜索,我一无所获,于是开始尝试。 ODBC 连接是使用 MySQL unicode 驱动程序设置的。我使用 ANSI 驱动程序重新创建了连接,它工作正常。

            希望这对其他人有所帮助。

            【讨论】:

              猜你喜欢
              • 2015-07-11
              • 2022-08-16
              • 1970-01-01
              • 1970-01-01
              • 2017-05-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多