关于'Bulk Insert'sql命令,我对某些法语口音有疑问。从文本文件插入后,'à'或'a acute'在数据库表中显示为n ++。这是唯一遇到当前转换问题的角色。我尝试使用'WITH'子句修改命令并分配诸如'RAW'或'1252'或'ACP'之类的值,但它们都不能保留此特定字符。我使用的数据库是Sql Server 2008.非常感谢任何帮助。谢谢。
仅供参考,我不使用任何编码或解码技术。只是尝试将文本文件中的任何内容放回数据库中。
感谢您的回复。但是,从'varchar'将列类型更改为'nvarchar'实际上并没有解决问题。它现在在数据库表列中显示为“∩┐╜”。有人在想吗?非常感谢提前
答案 0 :(得分:1)
正如Bridge所说,你需要NVARCHAR
。您还需要将文件转换为UTF-16,因为即使您使用BULK INSERT
,NVARCHAR
也无法使用UTF-8。
有关详细信息,请参阅this question。
这里有几个关于转换文件编码的问题,但是对于记录这对我有用:
public static void ConvertUtf8ToUtf16(string path, int bufferSize = 4096)
{
string tempPath = path + ".tmp";
char[] buffer = new char[bufferSize];
using (var input = File.OpenText(path))
using (var output = new StreamWriter(tempPath, false, Encoding.Unicode))
{
int index = 0;
int chars;
while ((chars = input.Read(buffer, index, bufferSize)) > 0)
output.Write(buffer, 0, chars);
}
// Swap the files
File.Delete(path);
File.Move(tempPath, path);
}
答案 1 :(得分:0)
将列类型更改为nvarchar
。