因为BCP导入性能要比其他的第三方工具kettle等强很多,所以优先应考虑使用BCP IN 的方式导入接口方传过来的文本文件,遇到的主要问题如下
1.文件格式问题
文件格式通常有三种 unix,dos,mac三种,可以在脚本中分别用dos2unix/mac2unix进行转换
2.文件编码问题
通过iconv进行转换,例如把UTF-8转换成CP936
iconv -f UTF-8 -t CP936 < V_BNET_MANAGER_SI_2013101617.txt> newtext.txt
3.bcp in 语句中编码问题
bcp 语句中可以通过 -J参数指定编码,-J后面的参数要参考$SYBASE\locales文件中的一至才行
例如:
bcp qos_sg.dbo.TEST in "TMP2.txt" -c -Y -t"@|@" -r"\n" -Jutf-8 -Usa -P -S168
Unrecognized localization object. Using default value 'iso_1'.
要改成
bcp qos_sg.dbo.TEST in "TMP2.txt" -c -Y -t"@|@" -r"\n" -Jutf8 -Usa -P -S168
4.是否包含首行的问题
如果对端提供的文本包含首行,则可以通过-F2来解决
5.字段格式转换问题
日期类型为2013/10/12的可以BCP自动转换,是20130916042757则会报转换错误,可以通过 [-f formatfile]来解决