在SQL Server 2008中存储其他语言并检索返回

问题描述:

我正在使用Excel工作表将上传我的记录到数据库中。 Excel工作表中的某些列不是英文的。如何读取其他语言并将其存储到数据库中?在SQL Server 2008中存储其他语言并检索返回

我可以在数据库中完美地阅读和存储英语。我搜索谷歌的一些选项。我尝试了下面的代码将其转换为UTF8并存储在数据库中。我使用的数据库是nvarchar(MAX)

byte[] bytes = Encoding.UTF8.GetBytes(dsExcel.Tables[0].Rows[i][7].ToString()); 
string myString = Encoding.UTF8.GetString(bytes); 

当它存储在数据库中时,我只能在列中看到??????????。如果我从文本框和商店输入,那么我没有任何问题。

请帮忙 - 可以做些什么?

我想从数据库中存储和检索相同的语言字符串。

+0

有没有必要转换为UTF-8只能转换回来在下一行 – Alejandro 2014-09-12 10:22:12

+0

@Alejandro:PLease可以详细说明。我应该在数据库中使用哪些数据类型。当我从excel中读取时,我会看到块而不是字符串。 – user2998990 2014-09-12 10:26:22

+0

我不认为你应该手动编码你的字符串。只需保存到数据库“原样”。是的,nvarchar是存储unicode符号的数据类型的正确选择。 – 2014-09-12 10:53:51

你的问题可能是你正在使用的UTF8编码。你需要使用Unicode。

但似乎没有必要使用编码类型:为什么不直接从DataTable行获取字符串?默认情况下,CLR将字符串视为unicode。

string myString = dsExcel.Tables[0].Rows[i][7].ToString(); 
+0

[UTF-8](http://en.wikipedia.org/wiki/UTF-8)** IS ** unicode,它是将unicode字符表示为计算机可以处理的字节的一种可能编码。 – Alejandro 2014-09-13 00:10:51

+0

它是Unicode,是的,但UTF-8是由有限字符集表示的**代表的**。这个问题需要别的东西:任务是以UTF-16格式存储字符,这些格式可以编码完整的Unicode字符集。 .Net中的System.String类型是UTF-16,与SQL Server的nvarchar数据类型相同。 – DvS 2014-09-13 17:14:53

+0

并非如此,UTF-8只是使用不同的字节enconding,但当然,就像所有的unicode编码一样,它支持整个字符集。这个问题似乎与.NET中的编码没有关系,但就Excels如何向程序发送数据而言,它似乎与此不匹配。 – Alejandro 2014-09-14 03:34:09