Azure Data Factory写入Informix小数列时字符转数值失败求助
解决Azure Data Factory写入Informix小数列的转换错误问题
问题分析
数据库区域设置为es_ES.819(西班牙区域),默认小数分隔符为逗号(,),但当前ODBC驱动与ADF的CSV解析规则不匹配:
- CSV用点(.)分隔小数时,ODBC驱动按区域规则无法将字符串转为数值,抛出
22018转换错误; - CSV改用逗号(,)分隔小数时,ADF默认解析规则不兼容,导致读取报错;
- JDBC可正常写入,说明核心问题是ODBC驱动的区域配置或ADF的解析规则未与数据库对齐。
解决方案
1. 统一ADF CSV解析与数据库的小数分隔符
- 在ADF的CSV数据集配置中,将小数分隔符明确设置为逗号(,),同时将目标列的类型定义为
Decimal或Double类型。这样ADF读取XX;22,22;xx格式的CSV时,会正确解析为数值而非字符串。 - 若原始CSV只能提供点分隔的小数,可在ADF数据流中添加派生列转换,执行以下表达式将点替换为逗号后转成数值:
toDecimal(replace(yourDecimalColumn, '.', ','))
2. 配置Informix ODBC驱动的区域参数
- 在ODBC连接字符串中添加区域兼容参数,强制驱动使用与数据库一致的规则,例如:
Driver={IBM INFORMIX ODBC DRIVER};Server=your_server;Database=your_db;Host=your_host;Service=your_service;Protocol=onsoctcp;Uid=your_user;Pwd=your_pwd;Locale=es_ES.819;DecimalSeparator=, - 检查ODBC数据源(DSN)的配置,确保区域设置与数据库的
es_ES.819完全匹配,避免驱动使用系统默认区域规则。
3. 切换为JDBC连接(快速替代方案)
既然JDBC可正常写入,直接在ADF中配置Informix JDBC连接器:
- 连接字符串示例:
jdbc:informix-sqli://<host>:<port>/<dbname>:informixserver=<server_name>;locale=es_ES.819;user=<username>;password=<password> - 确保JDBC驱动版本与Informix数据库版本兼容,ADF会自动处理区域适配的数值转换。
内容的提问来源于stack exchange,提问作者Emilio Salas
相关产品推荐
相关产品推荐

