【问题标题】:SQL data not retrieved in Unicode Hindi未以 Unicode 印地语检索 SQL 数据
【发布时间】:2012-12-28 11:18:35
【问题描述】:

我正在使用 C# 在 ASP.NET 中开发一个 Web 应用程序。我将 SQL 表中的数据保存为 Google 音译给出的 Unicode 字符。我应该使用印地语。我对添加数据没有任何问题。但是当我使用“SELECT”语句时,无论如何都不会从数据库表中检索到任何数据。

我的查询如下:

SELECT        uid, family_head, member_name, house_no, address, f_h_name, gender, caste, dob, occupation, literacy, end_date
FROM            family
WHERE        (member_name = 'समर्थ अग्रवाल')

它返回空值。

【问题讨论】:

  • 确保您使用的数据库是 UTF-8 编码的,以便它也可以存储其他语言的字符。
  • 如果我不使用 WHERE 子句,它会完美运行。在这种情况下,将返回所有行。我的数据库是 MS SQL DB 2008,它可以毫无问题地存储所有数据。
  • 是 member_name nvarchar 的数据类型?
  • 如果您将要搜索的值作为 参数 传递,而不是将其作为字符串文字插入到查询中,则不会出现此问题 - 并且这是一个很好的习惯。

标签: asp.net sql-server visual-studio-2010 c#-4.0 unicode-string


【解决方案1】:

将字符串更改为以N 开头以表示它是Unicode 字符串:

SELECT        uid, family_head, member_name, house_no, address, f_h_name, gender, caste, dob, occupation, literacy, end_date
FROM            family
WHERE        (member_name = N'समर्थ अग्रवाल')

否则,字符串将不是 Unicode 字符串,查询将不返回任何结果。

请参阅 MSDN 上的 Constants (Transact-SQL)

Unicode 字符串

Unicode 字符串的格式类似于字符串,但前面有一个 N 标识符(N 代表 SQL-92 标准中的国家语言)。 N 前缀必须为大写。例如,'Michél' 是一个字符常量,而 N'Michél' 是一个 Unicode 常量。 Unicode 常量被解释为 Unicode 数据,并且不使用代码页进行评估。

【讨论】:

  • 谢谢,它成功了。实际上,我尝试在此处添加“n”,但没有添加“N”。
  • @Samarth - 它必须是大写的N
  • 我也面临上述问题。我已经尝试了上述解决方案,但它不起作用。它返回 null。
  • @AtulPhadtare - 好吧,我不知道你的具体情况。 OP 确实说数据库中的列是 NVARCHAR - 是你的吗?您确定要查找的字符串存在于正在搜索的列中吗?
  • @Oded-I m 使用 nvarchar(max)。我的查询是这样的:select * from tbl_hindi where student=N'समर्थ'。
猜你喜欢
  • 2012-09-08
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 2013-05-24
相关资源
最近更新 更多