Gor*_*vic 20 sql-server bulkinsert utf-8 sql-server-2008-r2
我正在对sqlserver进行BULK INSERT,并且没有正确地将UTF-8字符插入数据库.数据文件包含这些字符,但在批量插入执行后数据库行包含垃圾字符.
我的第一个疑问是格式文件的最后一行:
10.0
3
1 SQLCHAR 0 0 "{|}" 1 INSTANCEID ""
2 SQLCHAR 0 0 "{|}" 2 PROPERTYID ""
3 SQLCHAR 0 0 "[|]" 3 CONTENTTEXT "SQL_Latin1_General_CP1_CI_AS"
Run Code Online (Sandbox Code Playgroud)
但是,在阅读这个官方页面后,在我看来,这实际上是SQL Server 2008版中的插入操作读取数据文件时的一个错误.我们使用的是版本2008 R2.
这个问题的解决方案是什么,或者至少是一种解决方法?
小智 37
我在寻找批量插入特殊字符的解决方案之前来到这里.不喜欢UTF-16的解决方法(这将使csv文件的大小加倍).我发现你绝对可以,而且非常简单,你不需要格式文件.因此,我正在为其他正在寻找相同内容的人添加此评论,因为它似乎没有在任何地方记录得很好,我相信这对非英语国家的人来说是一个非常普遍的问题.解决方案是:只需在批量插入的with语句中添加CODEPAGE ='65001'.(65001 = UTF-8的代码页编号).可能不适合迈克尔奥建议的所有unicode角色,但至少它适用于拉丁语,希腊语和西里尔语,可能还有很多其他人.
注意:MSDN文档说不支持utf-8,不相信它,对我来说这在SQL Server 2008中运行得很完美,但是没有尝试其他版本.
例如:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = '65001',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);
Run Code Online (Sandbox Code Playgroud)
如果所有特殊字符都在160-255(iso-8859-1或windows-1252)中,您还可以使用:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = 'ACP',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);
Run Code Online (Sandbox Code Playgroud)
Mic*_*l-O 28
你不能.您应该首先使用N类型数据字段,将文件转换为UTF-16然后导入它.该数据库不支持UTF-8.
小智 8
BULK INSERT #tmpData
Run Code Online (Sandbox Code Playgroud)FROM 'C:\Book2.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ';', --CSV field delimiter ROWTERMINATOR = '\n', --Use to shift the control to next row TABLOCK )
完成.
归档时间: |
|
查看次数: |
79860 次 |
最近记录: |