MS SQL - MySQL - Openquery 汉字导入为'?'

MS SQL - MySQL - Openquery Chinese characters imported as '?'

我正在将数据从 MySQL 数据库导入 Microsoft SQL 服务器数据库 (SQL_Latin1_General_CP1_CI_AS)。我将基于 OBDC 的 linkedserver 连接与 Openquery 语句结合使用。

我使用以下 MS SQL 语句:

 SELECT street_address FROM openquery(MYLINKEDSERVER,'SELECT street_address FROM customers')

部分地址包含中文字符,使用openquery时将其导入为问号,示例结果:

??? ??? 74 ?????501?

我尝试使用 latin1 进行转换 - 没有成功;

 SELECT * FROM openquery(MYLINKEDSERVER,'SELECT convert(street_address using latin1) FROM customers')

知道如何将汉字导入 MS SQL吗?

所以我设法让它发挥作用。

  1. 在 MySQL
  2. 中转换为二进制
  3. 通过openquery在SQL服务器中导入
  4. 转换为 SQL 服务器中的 varchar(max)
  5. 使用函数将 varchar UTF8 转换为 Nvarchar -->

结果查询;

SELECT dbo.func_utf_string(cast(bin AS varchar(MAX))) from openquery(MYLINKEDSERVER,'SELECT cast(street as binary) as bin from customers')

有两种 ODBC 驱动程序,一种是 ANSI (myodbc5a.dll) 一种是 Unicode (myodbc5w.dll)。 ANSI 驱动程序将始终 return varchar 数据。您需要使用 Unicode 驱动程序才能将 return 汉字作为 Unicode。

检查relevant paragraph on the ODBC driver's installation page and this related question

从一个代码页转换为另一个代码页时,未知或无法表示的字符将替换为 ? 或 Unicode 替换字符 �。字符串中的此类字符是尝试进行错误转换的明确标志。