SQL Server 2019中OPENROWSET解析JSON特殊字符转码问题咨询
SQL Server 2019解析JSON特殊字符乱码的解决方案
针对你遇到的OPENROWSET读取JSON时特殊字符(如Ó、Ñ)被错误转换为Ñ的问题,以下是几个可行的解决办法:
办法1:使用SINGLE_NCLOB替代SINGLE_CLOB
SINGLE_NCLOB会以Unicode格式读取文件,能更好兼容UTF-8编码的特殊字符,无需额外COLLATE转换即可正确解析:
SELECT d.* FROM OPENROWSET (BULK '\\drive\data.json', SINGLE_NCLOB) X CROSS APPLY OPENJSON (X.BulkColumn, '$.Data') WITH ([N] NVARCHAR(250)) AS d
办法2:指定CODEPAGE参数强制按UTF-8读取
SQL Server 2016及以上版本支持通过CODEPAGE = 65001(UTF-8对应的代码页)明确指定文件编码,确保读取时不会出现编码转换错误:
SELECT d.* FROM OPENROWSET (BULK '\\drive\data.json', SINGLE_CLOB, CODEPAGE = '65001') X CROSS APPLY OPENJSON (X.BulkColumn, '$.Data') WITH ([N] NVARCHAR(250)) AS d
办法3:先读取为二进制再转换为NVARCHAR
通过读取为VARBINARY(MAX)避免中间编码转换,再显式转换为UTF-8编码的NVARCHAR,彻底规避编码不匹配问题:
SELECT d.* FROM OPENROWSET (BULK '\\drive\data.json', SINGLE_BLOB) X CROSS APPLY OPENJSON (CAST(X.BulkColumn AS NVARCHAR(MAX)) COLLATE Latin1_General_100_CI_AS_SC_UTF8, '$.Data') WITH ([N] NVARCHAR(250)) AS d
补充说明
如果JSON文件本身带有BOM(字节顺序标记),上述方法依然有效;若文件编码不是UTF-8,需要对应调整CODEPAGE参数(比如GBK对应936)。
内容的提问来源于stack exchange,提问作者paone
相关产品推荐
相关产品推荐

