gpt4 book ai didi

sql-server - 为什么Latin1_General_CS_AS不区分大小写?

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

对于 LIKE 查询,Latin1_General_CS_AS 排序规则不区分大小写。根据bug report to Microsoft ,这被列为“按设计”。

但是,Latin1_General_Bin 排序规则也区分大小写,并且完全按照 LIKE 查询的预期工作。

您可以在这个简单的查询中看到差异:

SELECT
MyColumn AS Latin1_General_Bin
FROM MyTable
WHERE MyColumn LIKE '%[a-z]%' COLLATE Latin1_General_Bin;

SELECT
MyColumn AS Latin1_General_CS_AS
FROM MyTable
WHERE MyColumn LIKE '%[a-z]%' COLLATE Latin1_General_CS_AS;

SQL Fiddle Demo .

<小时/>

我的问题是:

  1. 为什么在 LIKE 中这会被视为“设计使然”不区分大小写?
  2. 如果这确实更好,为什么两个区分大小写的排序规则 _Bin_CS_AS 之间的行为不同?

我打算对 future 任何区分大小写的数据库进行Latin1_General_CS_AS标准化,但这似乎是一个即将发生的微妙查询错误。

最佳答案

这不是一个正则表达式。范围[a-z]只是意味着 >='a' AND <='z' .

根据包含除大写字母之外的所有字母的排序规则 Z .

SQL_Latin1_General_CP1_CS_AS除资本外的所有 A属于该排序顺序。

<小时/>

如果仍然不清楚,请查看以下排序顺序;对于三种不同的排序规则

SELECT * 
FROM (VALUES ('A'),('B'),('Y'),('Z'), ('a'),('b'),('y'),('z')) V(C)
ORDER BY C COLLATE Latin1_General_Bin

您会看到二进制排序规则将所有大写字母放在一起,而其他两个则没有。

+--------------------+----------------------+-------------------------------+
| Latin1_General_Bin | Latin1_General_CS_AS | SQL_Latin1_General_CP1_CS_AS  |
+--------------------+----------------------+-------------------------------+
| A | a | A |
| B | A | a |
| Y | b | B |
| Z | B | b |
| a | y | Y |
| b | Y | y |
| y | z | Z |
| z | Z | z |
+--------------------+----------------------+-------------------------------+

This is documented in BOL

In range searches, the characters included in the range may vary depending on the sorting rules of the collation.

关于sql-server - 为什么Latin1_General_CS_AS不区分大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24209826/

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