在我们的数据库中,我们有多个带有 caron/hatschek 的条目。现在我们的用户希望在搜索没有的条目时找到包含 caron/hatschek 的条目。我将通过一个简单的例子来说明这一点:
在我们的数据库中,我们有条目(联系人姓名)
Millière
Run Code Online (Sandbox Code Playgroud)
所以这个名字在这个人居住的国家是正确的。
在我们国家,我们没有任何带有 caron/hatschek 的字符,因此我们的用户搜索Milliere. 没有结果出现,因为è显然不匹配e。
我不知道这是如何实现的,因为é, è,ê还有更多可用的(这只是字母的一个例子e......)。
(另一种方法会容易得多,因为我可以简单地将所有带有 caron/hatschek 的字母替换为基本字母。显然,我们的用户确实想要数据库中名称的正确版本,而不是残缺的名称。)
鉴于此表:
CREATE TABLE test (
id INT NOT NULL,
description NVARCHAR(100) COLLATE Modern_Spanish_CI_AS NOT NULL
);
INSERT INTO test (id, description) VALUES (1, 'CO2');
Run Code Online (Sandbox Code Playgroud)
我意识到我无法解决排版问题:
SELECT * FROM test WHERE id = 1;
UPDATE test SET description = 'CO?' WHERE id = 1;
SELECT * FROM test WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)
因为更新匹配但没有效果:
id description
----------- -----------
1 CO2
(1 affected rows)
(1 affected rows)
id description
----------- -----------
1 CO2
(1 affected rows)
Run Code Online (Sandbox Code Playgroud)
就好像 SQL Server 确定了这一点,因为? 显然只是一个很小的2 …
为什么这两个SELECT语句会导致不同的排序顺序?
USE tempdb;
CREATE TABLE dbo.OddSort
(
id INT IDENTITY(1,1) PRIMARY KEY
, col1 NVARCHAR(2)
, col2 NVARCHAR(2)
);
GO
INSERT dbo.OddSort (col1, col2)
VALUES (N'e', N'eA')
, (N'é', N'éB')
, (N'ë', N'ëC')
, (N'è', N'èD')
, (N'ê', N'êE')
, (N'?', N'?F');
GO
SELECT *
FROM dbo.OddSort
ORDER BY col1 COLLATE Latin1_General_100_CS_AS;
Run Code Online (Sandbox Code Playgroud)
???????????????????????? ? ID ?列 1 ? 列 2 ? ???????????????????????? ? 1 ? ? ? ? 2 ? é ? 乙 ? ? 4 ? ? …
SQL Server 中的默认排序规则类型允许针对不区分大小写的字符串进行索引,但数据的大小写仍然保留。这实际上是如何工作的?我正在寻找实际的具体细节、位和字节,或详细解释它的好资源。
create table casetest (fruitnames nvarchar(50) not null);
create unique index IX_fruitnames on casetest(fruitnames);
insert into casetest values ('apples');
insert into casetest values ('Pears');
-- this insert fails
insert into casetest values ('pears');
-- this yields 'Pears' as a result
select * from casetest (forceseek) where fruitnames = 'PEARS'
update casetest set fruitnames = 'pears' where fruitnames = 'pEArs'
-- this yields 'pears' as a result
select * from casetest (forceseek) where fruitnames = 'PEARS'
Run Code Online (Sandbox Code Playgroud)
对于圣经希伯来语,我应该使用哪种 SQL Server 排序规则?所考虑的数据库需要适应变音符号(即元音、重音、比喻等)。
database-design sql-server collation configuration sql-server-2017
我在 SQL Server 2005/2008 中找不到直接设置UTF-8相关的选项Collations/Charsets,与可以在其他 SQL 引擎中设置的选项相同,但在 SQL Server 2005/2008 中只有拉丁语和 SQL 排序规则。
是否有一些选项可以在 Win2008 操作系统上的 SQL Server 引擎(两个版本)2005/2008 中强制/安装这些排序规则/字符集
sql-server-2005 sql-server-2008 sql-server collation encoding
我们正在从 SQL 2005 [Instance and DB has collation of SQL_Latin1_General_CP1_CI_AS] 迁移到 SQL 2008 [默认为Latin1_General_CI_AS]。
我完成了 SQL 2008 R2 安装,并使用了默认Latin1_General_CI_AS排序规则,数据库的恢复仍然在SQL_Latin1_General_CP1_CI_AS. 发生了例外的问题 -Latin1_General_CI_AS数据库 所在的 #temp 表, SQL_Latin1_General_CP1_CI_AS这就是我现在所在的位置 - 我现在需要关于陷阱的建议。
在安装 SQL 2008 R2 时,我可以选择在安装时使用'SQL Collation, used for backwards compatibility',我可以选择与 2005 数据库相同的排序规则:SQL_Latin1_General_CP1_CI_AS。
这将使我不会遇到#temp 表的问题,但是有陷阱吗?
如果不使用 SQL 2008 的“当前”归类,我会失去任何功能或特性吗?
我会在某个时候被迫去Latin1_General_CI_AS吗?
我读到一些 DBA 的脚本完成了完整数据库的行,然后使用新的排序规则将插入脚本运行到数据库中 - 我对此非常害怕和警惕 - 你会建议这样做吗?
我已将数据库排序规则设置为Latin1_General_BIN, 以使字符串比较区分大小写。这会影响性能吗?对数据库中的 DML 或 DDL 操作有什么影响吗?数据库已存在,其中包含表。
performance sql-server collation sql-server-2008-r2 unicode performance-tuning
请注意,此问题与供应商/版本无关
在我看来,作为英语演讲者(打字员、作家),期望单词的大小写正确但不一定具有正确方向的正确口音是合理的:
当我在香榭丽舍大街餐厅的酒店领班克洛伊 (Chloe the maitre d'hotel) 的茶会上沉思时,一边等着 garcon 拿来我炒过的墨西哥胡椒酱……
你明白了。
所以今天我想我想要一个搜索条件来使用区分大小写但不区分重音的排序规则,但找不到。这是否有充分的理由,或者我的只是一个罕见的用例?
这是我正在查看的一些文档的示例(尽管认为供应商/版本不可知):
我需要一个字符编码技巧来去除希伯来语重音标记。
之前的样品
???????????? ??????? ????????? ??????????????? ???????????????
样品后
?????????????? ?? ????? ??????