我正在使用sql Server 2008 R2 Enterprise.我正在编写一个能够插入,更新,删除和从sql表中选择记录的应用程序.当涉及到包含特殊字符(如ć,čš,đ和ž)的记录时,应用程序会出错.
这是发生的事情:
命令:
INSERT INTO Account (Name,Person) VALUES ('Boris Borenović','True') WHERE Id = '1'
插入新记录,但名称字段是Boris Borenovic,因此字符ć更改为c.
命令:
SELECT * FROM Account WHERE Name = 'Boris Borenović'
返回正确的记录,所以再次将字符ć替换为c并返回记录.
问题:
>是否可以使sql Server保存前面提到的ć和其他特殊字符?
>如果上一个问题得到解决,是否仍有可能使sql能够返回BorisBorenović记录,即使查询要求Boris Borenovic?
解决方法
1)确保列的类型为nvarchar而不是varchar(或者为char的nchar)
2)在包含这些字符串的字符串文字的开头使用N’,例如N’BorisBorenović’
3)如果你正在使用客户端库(例如ADO.Net),它应该处理Unicode文本,只要再次将参数标记为nvarchar / nchar而不是varchar / char
4)如果要查询和忽略重音,则可以在select中添加COLLATE子句.例如.:
SELECT * FROM Account WHERE Name = 'Boris Borenovic' COLLATE Latin1_General_CI_AI
其中_CI_AI表示不区分大小写,Accent Insensitive,应该返回所有行的末尾带有“c”的所有变量.
5)如果表中的列是UNIQUE / PK约束的一部分,并且您需要它包含“BorisBorenović”和“Boris Borenovic”,那么在列定义中添加一个COLLATE子句,但这次使用整理最后用“_AS”表示它的重音很敏感.