将 Openquery 中的丹麦字符 (Æ Ø Å) 保留到链接服务器
Posted
技术标签:
【中文标题】将 Openquery 中的丹麦字符 (Æ Ø Å) 保留到链接服务器【英文标题】:Keep danish characters (Æ Ø Å) in Openquery to linked server 【发布时间】:2017-02-15 08:50:09 【问题描述】:select * from openquery(DATABASENAME_LINKED, 'select id, pe_department_id, pe_username, pe_name, pe_hours, pe_startpage, pe_admin from person')
此查询中丢失了特殊字符。是否可以在代码或其他地方确保某种编码?
【问题讨论】:
链接了哪个服务器(另一个 mssql,或 oracle,db2,...)?什么是列数据类型? social.msdn.microsoft.com/Forums/sqlserver/en-US/… 我认为这是一个 mysql 数据库。数据类型很可能是 varchar 可能需要配置“排序规则兼容”和“排序规则名称”设置,或者将 varchars 转换为 nvarchar,请参阅上一页的 MSDN 文章。评论。角色发生了什么?用问号代替,或省略,或 Å > A? 例如,Ø 被转换为“ø”。我尝试根据您的链接将 pe_name 转换为 nvarchar(1000)(谢谢),但出现错误。我怎么弄乱你提到的设置? 链接服务器的配置是什么?你用什么作为 MySQL 的适配器?这里的部分问题是 MySQL 使用 UTF-8 而 SQL Server 的nvarchar
是 UTF-16。因此,一些翻译工作是必要的,理想情况下,您的链接服务器驱动程序会为您完成。
【参考方案1】:
从this article 重新调整函数UTF8_TO_NVARCHAR
的用途,可以即时进行转换:
SELECT
id,
pe_department_id,
dbo.UTF8_TO_NVARCHAR(cast(pe_name AS varchar(MAX))) pe_name,
pe_hours,
pe_startpage,
pe_admin
FROM OPENQUERY(
DATABASE_LINKED,
'select
id,
pe_department_id,
pe_name,
pe_hours,
pe_startpage,
pe_admin
from person'
)
在传递查询中使用 MySQL 的 CHARSET
指令强制转换列的更直观方法失败,没有有用的错误描述,因此我们没有进一步研究。
【讨论】:
遗憾的是,我收到“查询完成但出现错误”,并且没有 ucs2 的错误描述,utf16 的“未知字符集”。另外:“无法从链接服务器“DATABASE_LINKED”的 OLE DB 提供程序“MSDASQL”获取列信息。 和 pe_name 绝对是正确的。 如果您可以访问 mysql 数据库,您可以尝试直接在 mysql 上运行内部查询(使用演员表)。如果成功,请查看它并尝试从中选择。 我找到了一个解决问题的函数的链接:***.com/questions/28168055/…。所以现在代码看起来像这样: SELECT id , pe_department_id , DATABASE.dbo.UTF8_TO_NVARCHAR (cast(pe_name AS varchar(MAX))) , pe_hours , pe_startpage , pe_admin from openquery(DATABASE_LINKED,'select id, pe_department_id, pe_name, pe_hours, pe_startpage, pe_admin from person')以上是关于将 Openquery 中的丹麦字符 (Æ Ø Å) 保留到链接服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 xsl:sort 与外来字符(即“æ”、“ø”和“å”)
使用 std::wifstream 读取带有特殊字符的 unicode 文件