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

SSIS中DT_TEXT(代码页1254)转NVARCHAR:BQ到SQL Server特殊字符丢失问题

解决SSIS同步BigQuery到SQL Server时特殊字符丢失问题

核心原因

目标列varchar使用SQL_Latin1_General_CP1_CI_AS排序规则(对应ISO 8859-1编码),而İ、Ü、ü这类土耳其语字符不在该编码范围内。直接以ANSI方式插入(不带N前缀)会被替换为相近ASCII字符(如İ变为I),但通过Unicode(N前缀)插入时,SQL Server会自动完成字符映射以保留特殊字符。

可行解决方案

1. 用SSIS脚本组件转换为Unicode

如果无法通过数据转换组件直接将DT_Text转为DT_NTEXT,可通过脚本组件处理:

  • 添加脚本组件作为转换节点,选中需要处理的DT_Text输入列
  • 在脚本编辑器中,将输入列类型映射为.NET String(天然支持Unicode)
  • 定义一个DT_WSTR或DT_NTEXT类型的输出列,在脚本中直接将输入列值赋值给输出列
  • 将转换后的Unicode列连接到OLE DB目标组件

2. 配置OLE DB目标使用Unicode参数传递

强制SSIS以Unicode方式向目标表传递数据,等效于手动插入时的N'xxx':

  • 打开OLE DB目标的高级编辑器,切换到「组件属性」选项卡
  • 将AccessMode设为SQL command,手动编写插入语句:
    INSERT INTO target_table(target_column) VALUES (?)
    
  • 切换到「输入列和输出列」选项卡,将输入列的参数类型映射为DT_WSTR(而非DT_STR)

3. 强制BigQuery源用UTF-8编码读取

BigQuery数据默认以UTF-8存储,需确保SSIS源组件用正确编码读取:

  • 打开BigQuery源组件编辑器,找到对应DT_Text列的属性
  • 将CodePage设置为65001(UTF-8对应的代码页编号),避免转码时丢失特殊字符

4. 临时调整目标列排序规则(可选)

若允许临时修改目标表,可先切换到支持土耳其语的排序规则:

ALTER TABLE target_table ALTER COLUMN target_column VARCHAR(xxx) COLLATE SQL_Turkish_CI_AS;

同步完成后再改回原排序规则(注意:改回前需测试,避免不兼容字符丢失)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:55:13