gpt4 book ai didi

sql - Sql表中的Unicode字符

转载 作者:行者123 更新时间:2023-12-02 17:17:33 26 4
gpt4 key购买 nike

我使用的是 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替换并返回记录。

问题:

  1. 是否可以让Sql Server保存前面提到的ć和其他特殊字符
  2. 如果解决了上一个问题,即使查询要求 Boris Borenovic,Sql 是否仍然能够返回 Boris Borenović 记录?

因此,在保存记录时,我希望 Sql 准确保存给定的内容,但在检索记录时,我希望它能够忽略特殊字符。感谢您的所有帮助。

最佳答案

1) 确保列的类型为 nvarchar 而不是 varchar(或 nchar 为 char)

2) 在包含此类字符串的字符串文字的开头使用 N',例如N'Boris Borenović'

3) 如果您使用客户端库(例如 ADO.Net),它应该处理 Unicode 文本,只要再次将参数标记为 nvarchar/nchar 而不是 varchar/char

4) 如果您想查询并忽略重音符号,那么您可以在选择中添加 COLLATE 子句。例如:

SELECT * FROM Account 
WHERE Name = 'Boris Borenovic' COLLATE Latin1_General_CI_AI

其中 _CI_AI 表示不区分大小写、不区分重音,应返回末尾带有“c”所有变体的所有行。

5) 如果表中的列是 UNIQUE/PK 约束的一部分,并且您需要它同时包含“Boris Borenović”和“Boris Borenovic”,则向列定义添加 COLLATE 子句,但这次使用末尾带有“_AS”的排序规则,表示它区分重音。

关于sql - Sql表中的Unicode字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com