You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OPENROWSET读取ANSI编码文件时德语变音字符乱码问题

OPENROWSET读取ANSI(cp1252)文件乱码的解决方案

问题背景

旧环境(Windows Server 2012、SQL Server 2012,排序规则Latin1_General_CI_AS)中,使用OPENROWSET读取ANSI(cp1252)格式文件时,德语变音字符(如Empfänger、Übung)显示正常。升级至新环境(Windows Server 2016、SQL Server 2019,UTF-8排序规则Latin1_General_100_CI_AS_SC_UTF8)后,读取ANSI文件时变音字符出现乱码(如Empf�nger),但读取UTF-8文件正常。原OPENROWSET脚本对ANSI文件失效,调整Schema.ini的CharacterSet参数(1252、65001等)无效果,但通过BULK INSERT指定代码页1252或Polybase外部表可正常读取。

可行解决方案

方案1:使用Microsoft ACE OLEDB驱动替代旧Access Text Driver

新环境下,旧的Access Text Driver对UTF-8排序规则的SQL Server兼容性较差,改用ACE驱动可更好处理字符集映射:

  1. 确保Schema.ini配置正确(与CSV文件同目录)
    创建或修改Schema.ini,内容如下:

    [FlatFileTest_ANSI.csv]
    Format=Delimited(;)
    CharacterSet=1252
    ColNameHeader=True
    
  2. 调整OPENROWSET脚本

    SELECT * 
    FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
                    'Text;Database=\\localhost\_RepUploader;CharacterSet=1252;', 
                    'SELECT * FROM FlatFileTest_ANSI.csv')
    

    注:若服务器未安装ACE驱动,需先安装对应位数的Microsoft Access Database Engine 2016 Redistributable。

方案2:优化MSDASQL驱动的连接字符串

若必须保留原MSDASQL驱动,需在连接字符串中明确指定字符集,并将文件目录作为Dbq参数传入:

SELECT * 
FROM OPENROWSET('MSDASQL', 
                'Driver={Microsoft Access Text Driver (*.txt, *.csv)};Dbq=\\localhost\_RepUploader;CharacterSet=1252;', 
                'SELECT * FROM FlatFileTest_ANSI.csv')

此方式可强制驱动读取指定代码页的文件,避免因SQL Server UTF-8排序规则导致的字符映射错误。

验证方法

执行调整后的OPENROWSET脚本,检查结果集中的Empfänger、Üben等德语变音字符是否正常显示,无乱码。

内容的提问来源于stack exchange,提问作者Vincent Vega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:35:31