【问题标题】:Get ?? when taking chinese characters from excel sheet and exporting to mysql via vba得到 ??从excel表中获取汉字并通过vba导出到mysql时
【发布时间】:2016-01-31 23:12:34
【问题描述】:

让我先说这个问题,我知道这个主题在许多帖子中都从不同的角度来解决。但是,我已经为此花费了数小时和数小时,但仍然无法使其正常工作,因此请寻求帮助。

我在 Excel 工作表的单元格中有一些汉字。我正在使用 VBA 将这些单元格的内容导出到 mysql 表中。从 mysql 命令行,我能够成功地将汉字插入表中(我使用的是 utf8mb4 字符集)。

我还在 VBA 连接字符串中设置了 charset=utf8mb4。

但是,我无法让 VBA 在查询字符串中包含中文字符,如下所示:

    SQLStr = "INSERT INTO " & VBA.Trim(databaseName) & ".translationTable" & " VALUES ('" & _
    timestamp & "','" & _
    Replace(Worksheets("translationTable").Range("IORange").Cells(Counter, 2), Chr(10), "") & "','" & _
    Replace(Worksheets("translationTable").Range("IORange").Cells(Counter, 3), Chr(10), "") & "','" & _
    Replace(Worksheets("translationTable").Range("IORange").Cells(Counter, 4), Chr(10), "") & "','" & _
    Replace(Worksheets("translationTable").Range("IORange").Cells(Counter, 4), Chr(10), "") & "')"
    rs.Open SQLStr, oConn

我知道VBA编辑器无论如何都不会显示中文字符。但是,从 VBA 插入的汉字显示为 ??也在数据库中。

似乎我正在做的事情是在执行 INSERT 语句之前将汉字转换为 ASCII。

我做错了什么?

【问题讨论】:

    标签: mysql vba excel character-encoding


    【解决方案1】:

    出现多个问号的常见原因:

    • 你有 utf8 编码的数据(好)
    • SET NAMES latin1 生效(默认,但错误)
    • 该列被声明为CHARACTER SET latin1(默认,但错误)

    如果这些提示还不够,请向我们展示表格中的内容,使用类似

    SELECT col, HEX(col) FROM tbl...
    

    中文不能“转为ascii”。

    附录

    尝试将 DNS 的“连接选项”->“初始语句”设置为“SET NAMES utf8mb4”。 -- MySQL ODBC 3.51 Driver UTF-8 encoding

    【讨论】:

    • ODBC/Mysql 驱动程序不允许设置名称(我使用的是 5.5.25)。相反,我在连接字符串中设置了字符集(如上所述),但是我不知道它是否足够。问题不在数据库方面,因为当我通过 MySQL 工作台插入中文字符时它可以工作。通过 Workbench 插入汉字的十六进制是 E4BAA4E4BB98 而从 VBA 插入是 3F3F。
    • 您的连接器/ODBC 的版本号是多少?
    • Unicode 在带有 Connector/ODBC 3.51 驱动程序的 ADO 应用程序(包括 ASP)中不受支持。请考虑测试 MySQL 连接器/ODBC 5.1,其中包括对 ASP 的 Unicode 支持。 -- bugs.mysql.com/bug.php?id=18731
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多