SQL Server& ASP .NET编码问题

时间:2010-09-15 14:55:53

标签: asp.net sql-server-2005 encoding

我的页面添加了utf-8元元素+ sql server编码也是utf。但是当我创建记录并尝试发出带有包含'ń'等POLISH字符的条件的SELECT语句时,我看不到任何结果。有什么想法我错过了什么?

另外Sql管理工作室用POLISH字符显示结果,但我不相信它....我想将记录放入数据库有问题...

或者我该如何排除故障?

谢谢,帕维尔

3 个答案:

答案 0 :(得分:3)

我有同样的问题,我通过在WHERE子句中加上“N”前缀来解决它。

例如,我有一个表'人',其中包含超过21,000个人的名字。最近将姓氏为“Krzemiński”的人添加到数据库中,当显示该行时,该名称显示正常(即,正确显示“ń”字符)。但是,以下两个语句均未返回任何记录:

SELECT * FROM Person WHERE FamilyName='Krzemiński
SELECT * FROM Person WHERE FamilyName LIKE 'Krzemiń%'

...但这些陈述都返回了正确的记录:

SELECT * FROM Person WHERE FamilyName LIKE 'Krzemi%'<br>
SELECT * FROM Person WHERE FamilyName LIKE 'Krzemi%ski'

当我执行以下声明时:

SELECT * FROM Person WHERE FamilyName LIKE '%ń%'

我得到所有包含字母“n”(无变音符号)的8900条记录,但我获取包含“ń”字符的记录。我用所有波兰字符(ąćęłńóśźż)尝试了最后一个查询,除了“ó”之外的所有字符都表现出相同的行为(即返回所有具有低ASCII等效字符的记录)。奇怪的是,“ó”可以正常工作,只返回那些在FamilyName字段中带有“ó”的记录。

在任何情况下,解决方案都是在搜索条件前加上“N”,以明确地将其声明为Unicode。

因此,以下陈述:

SELECT * FROM Person WHERE FamilyName LIKE N'%ń%'
SELECT * FROM Person WHERE FamilyName=N'Krzemiński'

...都返回正确的记录集。

我感到困惑的原因是我有很多带有奇怪变音符号的记录,即使没有“N”前缀,它们也会返回正确的记录。到目前为止,我发现需要明确的“N”前缀的唯一字符是波兰字符。

答案 1 :(得分:1)

答案 2 :(得分:0)

只需使用nvarchar而不是varchar作为保存记录的列的数据类型。