事实上SQL Server不支持UTF-8,仅支持UTF-16.
http://stackoverflow.com/questions/5498033/how-to-write-utf-8-characters-using-bulk-insert-in-sql-server
因此要想导入UTF-8到SQL Server,需要以下步骤。
1, 将文件转换成UTF-16.
转换的方式很多。有很多online的转换器,但是更方便的是使用notepad++:
使用notepad++打开源文件->encoding。此时应该看到当前编码是UTF-8或UTF-8 with BOM。选择UCS-2,然后保存即可。UCS-2和UTF-16非常相似,有一点小区别一般可忽略不计。
2, 创建目标表。
在数据库中创建数据导入的目标表。注意数据类型要选择nchar或nvarchar。下面这篇文章解释了原因:
http://blog.csdn.net/onlyqi/article/details/28418879
3, 使用bulk insert导入数据。
BULK INSERT DELLAPJ_CHINESE_PRC_STROKE.dbo.test1
FROM 'C:\Users\886981\Desktop\test.csv'
WITH
(
FIELDTERMINATOR =',',
ROWTERMINATOR ='\n',
DATAFILETYPE = 'widechar'
);
这里注意如果设置codepage为65001,既UTF-8,则SQL Server会明确报错说不支持该字符集。
最后我想强调一点,在import/export wizard中可以选择code page为65001, 但是我从来没成功导入过。。。