我正在对 sqlserver 进行批量插入,但它没有正确地将 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"
但是,读完之后这个官方页面在我看来,这实际上是SQL Server 2008版本中通过插入操作读取数据文件时的一个错误。我们使用的是2008 R2版本。
该问题的解决方案或至少是解决方法是什么?
我在寻找批量插入特殊字符的解决方案之前来到这里。
不喜欢 UTF-16 的解决方法(这会使 csv 文件的大小增加一倍)。
我发现你绝对可以,而且非常简单,不需要格式文件。
这个答案适用于其他正在寻找相同答案的人,因为它似乎没有在任何地方得到很好的记录,而且我相信这对于非英语国家的人来说是一个非常常见的问题。解决办法是:
只需在批量插入的 with 语句中添加 CODEPAGE='65001' 即可。 (65001=UTF-8 的代码页号)。
可能不适用于 Michael O 建议的所有 unicode 字符,但至少它非常适合拉丁语扩展、希腊语和西里尔语,可能还有许多其他字符。
注意:MSDN 文档说不支持 utf-8,不要相信,对我来说这在 SQL Server 2008 中工作得很好,但是没有尝试其他版本。
e.g.:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = '65001',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);
如果所有特殊字符都在 160-255(iso-8859-1 或 windows-1252)内,您还可以使用:
BULK INSERT #myTempTable
FROM 'D:\somefolder\myCSV.txt'+
WITH
(
CODEPAGE = 'ACP',
FIELDTERMINATOR = '|',
ROWTERMINATOR ='\n'
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)