我在MS SQL Server 2012上有批量插入问题。输入文件以UTF-16 BE保存。
BULK INSERT Positions
FROM 'C:\DEV\Test\seq.filename.csv'
WITH
(
DATAFILETYPE = 'widechar',
FORMATFILE = 'C:\DEV\Test\Format.xml'
);
Fortmat文件:
<?xml version="1.0" encoding="utf-16"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="ActionCode" xsi:type="NCharFixed" LENGTH="4" />
<FIELD ID="T1" xsi:type="NCharFixed" LENGTH="2" />
<FIELD ID="ReofferCounter" xsi:type="NCharFixed" LENGTH="6" />
<FIELD ID="T1" xsi:type="NCharFixed" LENGTH="2" />
... other fields....
</RECORD>
<ROW>
<COLUMN SOURCE="ActionCode" NAME="DT" xsi:type="SQLNCHAR" LENGTH="255" />
<COLUMN SOURCE="ReofferCounter" NAME="NO" xsi:type="SQLNCHAR" LENGTH="255" />
</ROW>
</BCPFORMAT>
输入文件样本:
02|+00|... other cols....
02|+00|... other cols....
我有两个问题:
1)如果输入文件的编码为UTF-16 BE,我只会输入中文字符而不是数字。
2)如果我将输入文件转换为UTF-16 LE,我看到正确的字符,但是字符数据向左移动一个字符 - 好像BOM已被解析(并计为1个字符),但不是转化为输出(我不想要)。
问题:
1)我有办法,如何导入UTF-16 BE中的文件并转换为LE?
2)导致转变的原因以及如何避免转变?