【问题标题】:Special characters displaying incorrectly after BULK INSERTBULK INSERT 后特殊字符显示不正确
【发布时间】:2012-12-09 10:29:00
【问题描述】:

我正在使用 BULK INSERT 导入 CSV 文件。 CSV 文件中的一列包含一些包含分数的值(例如1m½f)。

我不需要对分数进行任何数学运算,因为这些值仅用于显示目的,因此我将列设置为nvarcharBULK INSERT 有效,但是当我查看 SQL 中的记录时,分数已被替换为分号 (¢),因此显示的文本为 1m¢f

我很想了解发生这种情况的原因以及有关如何解决此问题的任何想法。 BULK INSERT 命令是:

BULK INSERT dbo.temp FROM 'C:\Temp\file.csv' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' );

【问题讨论】:

  • 数据是否真的包含二分之一字符?
  • 是的,它包含 ½ 字符而不是 1/2。
  • @AaronBertrand,批量插入是:code BULK INSERT dbo.temp FROM 'C:\Temp\file.csv' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n') ;排序规则是 Latin1_General_CI_AS。如何检查文件是否标记为 Unicode?​​span>
  • 您可以检查文件是否为 Unicode,例如,在记事本中打开文件,然后转到文件 > 另存为。根据 Windows 的版本,您应该会在某处看到“编码”下拉菜单,其中包含 ANSI、UTF-8、Unicode、Unicode 大端序等选项...
  • @AaronBertrand,谢谢 - 它显示 ANSI。

标签: sql sql-server-2012 bulkinsert nvarchar


【解决方案1】:

您需要使用CODEPAGE = 'ACP'BULK INSERT,它将字符串数据从 Windows 代码页 1252 转换为 SQL Server 代码页。

BULK INSERT dbo.temp FROM 'C:\Temp\file.csv' 
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', CODEPAGE = 'ACP');

如果您在足够新的 SQL Server 版本上引入 UTF-8 数据:

[...] , CODEPAGE = '65001');

您可能还需要指定DATAFILETYPE = 'char|native|widechar|widenative'

【讨论】:

  • 这也是我正确批量插入带有重音字符(例如 è)的 ansii 文本所需要的。
  • 谢谢@aaron bertrand。它部分地为我工作。我在插入重音字符时遇到问题。例如:ä 显示为 ä
  • @user1417294 文件的编码是什么,列的数据类型和排序规则,数据库和实例的排序规则?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2015-07-05
相关资源
最近更新 更多