SQL Server从C#生成的CSV批量插入特殊字符/Unicode

SQL Server从C#生成的CSV批量插入特殊字符/Unicode,c#,sql,sql-server,unicode,C#,Sql,Sql Server,Unicode,情景: 从C#生成的CSV文本文件将使用大容量插入导入SQL Server数据库。某些字段包含特殊字符(也称为Unicode) 问题: 特殊字符在文本文件中正确显示,但未正确保存在数据库中 编辑:正确文本的示例是“Khālid MuḥammadʻAlīal-Ḥājj”,错误文本的示例是“Khālid MuḥammaḍAliɗal-H̄ājj”。我从多个来源拼凑出了这个问题的答案,所以这里是一个地方的全部内容 (1) 文本文件必须标记为Unicode文件 StreamWriter

情景: 从C#生成的CSV文本文件将使用大容量插入导入SQL Server数据库。某些字段包含特殊字符(也称为Unicode)

问题: 特殊字符在文本文件中正确显示,但未正确保存在数据库中


编辑:正确文本的示例是“Khālid MuḥammadʻAlīal-Ḥājj”,错误文本的示例是“Khālid MuḥammaḍAliɗal-H̄ājj”。

我从多个来源拼凑出了这个问题的答案,所以这里是一个地方的全部内容

(1) 文本文件必须标记为Unicode文件

StreamWriter writer = new StreamWriter(fileName, append: false, encoding: Encoding.Unicode);
(2) 数据库列必须使用Unicode数据类型。例如,使用NVARCHAR代替VARCHAR。使用以“N”开头的数据类型之一

旁注:您可以通过在T-SQL中的字符串文本前面加上N来将其标记为Unicode字符串

INSERT INTO myTable (Name) VALUES (N'special characters');
(3) 在大容量插入命令中指定DATAFILETYPE='widechar'。(如果文件未标记为Unicode,则会引发错误。)


(4) 使用数据库排序SQL\u Latin1\u General\u CP1\u CI\u AS。

您的问题是什么?你说你没有被“正确地”保存,这是什么意思?他们是否是错误的角色,他们是否显得很奇怪,他们是否完全丢失了(没有角色),或者其他什么?“未正确保存”是什么意思?那么,当它不工作时,您使用的代码是什么?是的,你在这里写了一个答案,但它并没有真正说明你最初遇到的问题是什么。没有代码来复制这个问题,这意味着未来的读者将不知道这个答案是否与他们相关,因为他们不知道是什么代码导致了你的问题。
BULK INSERT dbo.myTable FROM 'C:\path\fileName.csv' 
WITH (DATAFILETYPE ='widechar', FIRSTROW=2, FIELDTERMINATOR='|', ROWTERMINATOR='\n');