得到??当从excel表中获取汉字并通过vba导出到mysql时

问题描述 投票:0回答:2

让我在这个问题前说一句,我知道很多帖子都从不同的角度讨论了这个主题。然而,我花了很多时间在这上面,但仍然无法让它工作,所以寻求帮助。

我的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
2个回答
1
投票

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

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

如果这些提示还不够,请使用类似

的内容向我们展示表格中的内容
SELECT col, HEX(col) FROM tbl...

中文无法“转换为ascii”。

附录

尝试将 DNS 的“连接选项”->“初始声明”设置为“SET NAMES utf8mb4”。 -- MySQL ODBC 3.51 驱动程序 UTF-8 编码


0
投票

我使用驱动程序“Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};”也遇到了同样的问题所以我用“Provider=Microsoft.ACE.OLEDB.12.0;”更改了它它解决了问题。

简而言之,我的旧观念是: “驱动程序={Microsoft Excel 驱动程序(*.xls、*.xlsx、*.xlsm、*.xlsb)}; DBQ=” & ID_Database &”; IMEX=1;”

新的工作是: "Provider=Microsoft.ACE.OLEDB.12.0;数据源=" & ID_Database & ";扩展属性=""Excel 12.0;HDR=YES;IMEX=1;"";"

现在我可以使用 SQL“SELECT”从 Excel 工作表中检索和使用汉字。

© www.soinside.com 2019 - 2024. All rights reserved.