加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sql表中的Unicode字符

发布时间:2020-12-12 07:44:36 所属栏目:MsSql教程 来源:网络整理
导读:我正在使用Sql Server 2008 R2 Enterprise.我正在编写一个能够插入,更新,删除和从Sql表中选择记录的应用程序.当涉及到包含特殊字符(如?,??,?和?)的记录时,应用程序会出错. 这是发生的事情: 命令: INSERT INTO Account (Name,Person) VALUES ('Boris Borenov
我正在使用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?

因此,在保存记录时,我希望Sql能够准确地保存所给出的内容,但是在检索记录时,我希望它能够使用特殊字符.谢谢你的帮助.

解决方法

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”表示它的重音很敏感.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读