重音字符不能正确地与BULK INSERT进口(Accented characters not co

2019-07-05 21:11发布

我导入源CSV文件,我不知道该信源编码,我只能看到两种� (ANSI编码)或(UTF8-没有-BOM编码),当我打开一个文件用Notepad++ ( 相关问题 )。

此文件已经导入到数据库mssql-2008使用bulk insert

DECLARE @bulkinsert NVARCHAR(2000)              
  SET @bulkinsert =               
 N'BULK INSERT #TempData FROM ''' +               
@FilePath +               
N''' WITH (FIRSTROW = 2,FIELDTERMINATOR = ''","'',ROWTERMINATOR =''\n'')'              
     EXEC sp_executesql @bulkinsert 

这被复制到正规table1#tempData在列1( varchar() 现在,当我看这个table1我看到一些? 代替这些字符。

我试图castnvarchar()但它并不能帮助。

当我挖成什么这些字符真的是支撑位在同一时间,我们下载的链接,我看到人物都是éäå等。

我会用replace来修正数据,但我需要做一些丑陋的代码,并期待进言的独特图案和替换,所以似乎很难。

数据库/表归类: SQL_Latin1_General_CP1_CI_AS COLUMN1(VARCHAR(80))

我可以更改这些字符类似英语的字符或原始字符,而不是? 分数。

我已经看过排序规则和Unicode支持这对我没有帮助。 我明白这是什么意思关于编码,但并没有与供应我做什么 。 我特地到这里的大部分职位的计算器是有一些关于它的帖子,但没有符合我的搜索。

我无法找出问题所在。

Answer 1:

它回答的评论。 你尝试了吗?

http://msdn.microsoft.com/en-us/library/ms189941.aspx

选项DATAFILETYPE = 'widenative'

基于从Esailiga评论之前做过或批量导入后的文本被截断。 我同意这听起来像CSV文件本身是单字节。 Unicode的需要选择DATAFILETYPE = 'widenative'。 如果CSV文件是单字节的不是魔术翻译回来。

什么是太糟糕了为E扩展ASCII与SQL焦炭让更多的证据,问题出在CSV支持。
SELECT CAST( 'E' 为CHAR(1))
注意到这一点可以作为扩展的ASCII(<255)

听起来像是你需要去回源。

的? 在SQL是未知的。 同在记事本中。



Answer 2:

在我来说,我可以修复与CODEPAGE选项的编码问题:

BULK
INSERT #CSV
FROM 'D:\XY\xy.csv'
WITH
(
   CODEPAGE = 'ACP',
   DATAFILETYPE ='char',
   FIELDTERMINATOR = ',',
   ROWTERMINATOR = '\n',
   FIRSTROW = 2
)

可能的值:CODEPAGE = { 'ACP' | 'OEM' | “原始” | 'code_page'}]

你可以找到关于此选项的详细信息: BULK INSERT



Answer 3:

我仍然无法相信,毕竟这些年来微软还没有修复这个明显的bug。 应该有与èéêë等没有问题,因为他们都是ASCII(<255)。 这个任务提出了一遍又一遍在许多网站和问题尚未得到回答

我的数据是在Excel表格。 已经生成入语句表被解析的第二时间寻找asccii>“Z”和生成和更新表中设置列语句覆盖导入的数据插入。 繁琐但可行



Answer 4:

我已经做到了! 毕竟这些年来,我们都找错了地方。 没有工作,不需要重写剧本...

问题在于SSMS ......如果“新查询”由“查询”右键单击你重命名的文件,但不能创建它是为你做了...

但是如果你把“CTRL + N”你得到一个新的查询窗口进行编辑,但没有文件被创建...所以你自己保存,并选择保存按钮编码......接近列表的底部,你”终有一天会发现UTF-8(无签名)代码页65001

这是...

脚本后脚本打开一个新的查询窗口“CTRL + N”的副本,并从现有的查询粘贴,保存为上述指示。 而仿佛被施了魔法它的工作原理

如果你像我一样在Excel表格...解析表写输出到一个新的工作簿中的第1列1片,然后另存为,选择UTF-8编码

要加快处理速度与包含注释的模板文件“ - UTF-8”这样的事情。 将其保存为UTF-8和使用*粘贴到Excel .SQL的文件列表来连接=串连的列表中( “仁templatefile.txt”,CHAR(34)中,a1,CHAR(34))b1和拖放下

经过这些年的手动解决方案,我从字面上与发现的兴奋出汗。 谢谢你让我如此不安



文章来源: Accented characters not correctly imported with BULK INSERT