让我在这个问题前说一句,我知道很多帖子都从不同的角度讨论了这个主题。然而,我花了很多时间在这上面,但仍然无法让它工作,所以寻求帮助。
我的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。
我做错了什么?
出现多个问号的常见原因:
SET NAMES latin1
已生效(默认,但错误)CHARACTER SET latin1
(默认,但错误)如果这些提示还不够,请使用类似
的内容向我们展示表格中的内容SELECT col, HEX(col) FROM tbl...
中文无法“转换为ascii”。
附录
尝试将 DNS 的“连接选项”->“初始声明”设置为“SET NAMES utf8mb4”。 -- MySQL ODBC 3.51 驱动程序 UTF-8 编码
我使用驱动程序“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 工作表中检索和使用汉字。