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

Azure Synapse中ForEach SQL插入外文显示为???的问题求助

Azure Synapse插入MSSQL外文显示为"?????"的排查与解决

核心原因及修复方案

1. INSERT语句缺失Unicode前缀N

MSSQL里,未加N前缀的字符串常量会被默认解析为非Unicode(VARCHAR)类型,哪怕目标列是NVARCHAR,也会丢失Unicode字符。

  • 错误示例:
INSERT INTO YourTable (ForeignTextCol) VALUES ('外文文本')
  • 正确写法:
INSERT INTO YourTable (ForeignTextCol) VALUES (N'外文文本')

如果是在ForEach活动中用参数化查询,要确保参数被映射为Unicode类型;若用动态拼接SQL,必须给字符串值加上N前缀(优先用参数化,避免SQL注入)。

2. 数据库连接字符串未启用Unicode传输

检查Synapse中连接MSSQL的链接服务配置,确保连接字符串包含Unicode=True参数,强制连接以Unicode编码传输数据:

Server=tcp:yourserver.database.windows.net,1433;Initial Catalog=yourdb;Persist Security Info=False;User ID=youruser;Password=yourpass;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Unicode=True

3. ForEach活动中数据类型转换异常

Lookup输出正常不代表后续处理没问题,检查ForEach里的逻辑:

  • 若用数据流活动,确认字符串列的类型是String (UTF-8)或String (Unicode)
  • 若用自定义脚本,确保变量类型保留Unicode属性(Synapse默认字符串变量是Unicode,但自定义转换时别手动转成非Unicode类型)

4. 数据库/列的Collation不匹配

即使列是NVARCHAR,若Collation不支持目标外文(比如用了SQL_Latin1_General_CP1_CI_AS),也会导致显示乱码。

  • 检查列的Collation:
SELECT name, collation_name FROM sys.columns WHERE object_id = OBJECT_ID('YourTable') AND name = 'ForeignTextCol'
  • 修改为对应语言的Unicode Collation(比如阿拉伯语用Arabic_CI_AS):
ALTER TABLE YourTable ALTER COLUMN ForeignTextCol NVARCHAR(255) COLLATE Arabic_CI_AS NOT NULL

快速排查步骤

  1. 直接用SSMS执行带N前缀的INSERT语句,验证数据库本身能否正常存储外文
  2. 检查Synapse链接服务的连接字符串是否包含Unicode=True
  3. 开启Synapse调试模式,查看ForEach活动实际执行的INSERT语句,确认N前缀是否存在
  4. 核对数据流中字符串列的类型配置

内容的提问来源于stack exchange,提问作者Waleed Alfaris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:40:33