我已经面临一个问题几个小时了,我似乎无法理解这个问题。
所以我有一个SQL Server数据库2008R2,Collation SQL_Latin1_General_CP1_CI_AS。 里面有一个表,名为incoming_name的字段。该字段的排序规则也是SQL_Latin1_General_CP1_CI_AS,它是一个NVARCHAR(255)。
我有一个大约123000行的.csv文件。这是一个基本的csv,文本周围没有双引号,但字段内没有逗号,所以当我运行手动导入到我的数据库时,它工作正常。 incoming_name字段包含所有类型的文本,但不得超过255个字符。在几行中有法语口音(如'Ch * * teau d'Agassac')。
现在我尝试使用代码
select
test_file.[INCOMING_NAME] COLLATE SQL_Latin1_General_CP1_CI_AS
as [INCOMING_NAME]
, test_file.[PRODUCT_CODE] AS [PRODUCT_CODE]
FROM
OPENROWSET(
BULK 'INSERT PATH OF THE .CSV HERE',
FORMATFILE = 'INSERT PATH OF THE FORMAT FILE HERE',
FIRSTROW = 2
) AS test_file
使用格式文件
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR=',' MAX_LENGTH="255" COLLATION="SQL_LATIN1_GENERAL_CP1_CI_AS" />
<FIELD ID="29" xsi:type="CharTerm" TERMINATOR='\r\n' />
</RECORD>
<ROW>
<COLUMN SOURCE="4" NAME="INCOMING_NAME" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="29" NAME="PRODUCT_CODE" xsi:type="SQLNVARCHAR"/>
</ROW>
导入工作正常,我得到了我的所有数据,在正确的字段中使用正确的值,除了重音...
例如,当我在查询结束时添加where test_file.incoming_name like '%agassac%'
时,我得到的结果就像'Château d'Agassac'而不是我数据库中的原始数据'Châteaud'Agassac'。
我不明白的是,我觉得在这个过程的每一步,我都选择了一个带有unicode数据类型(NVARCHAR)的口音敏感校对,所以我真的不明白为什么导入没有选择口音。
感谢您阅读这个长期的问题,
约翰。
编辑:好的,看起来我要导入的.csv文件是用utf-8编码的,而SQL Server 2008不想支持utf-8导入。现在我不知道该怎么做。欢迎任何想法...
答案 0 :(得分:0)
我认为将 widenative 添加为 DATAFILETYPE 可以解决此问题。有关详细信息,请参阅此链接:http://msdn.microsoft.com/en-us/library/ms189941.aspx