1 / 有时你写
ALTER DATABASE [MyDb] COLLATE SQL_Latin1_General_CP1_CI_AS
过了一会儿,如果你试试
ALTER DATABASE [MyDb] COLLATE FRENCH_CI_AS
可能不会成功。为什么这个?
如果table1为SQL_Latin1_General_CP1_CI_AS
并且table2为FRENCH_CI_AS
,则 2 /
一个人不能写...where table1.field1= table2.field2
数据库或表格中COLLATE的后果是什么?
答案 0 :(得分:1)
您可以将项目与不同的排序规则进行比较。对于SQL Server,您使用:
table1.field1 = table2.field2 COLLATE FRENCH_CI_AS
或
table1.field1 = table2.field2 COLLATE SQL_Latin1_General_CP1_CI_AS
(或者无论field1整理是什么)。
注意:您应该尝试将排序规则作为服务器默认值,除非您有特殊原因要做其他事情。
答案 1 :(得分:1)
您可以将查询与整理名称进行比较
table1.field1 = table2.field2 COLLATE FRENCH_CI_AS
否则改变列。(如果你想改变字段COLLATE)
ALTER TABLE [dbo].[TableName]
ALTER COLUMN [FieldName] [DataType] COLLATE [Collate Name] NOT NULL
答案 2 :(得分:1)
这个答案基于使用Ms Sql Server的经验。我在使用其他数据库时只有一点经验,但我想其中很多也适用于它们。
来自Msdn(here):
Collations允许用户根据自己的字符串对字符串进行排序和比较 约定
Collations用于让sql server知道哪些字符被认为是相同的。如果使用不区分大小写的排序规则,则X
和x
被视为相同。如果使用区分大小写的排序规则,则它们是不同的。在重音不敏感的排序规则e
和é
可能被认为是相同的,而在重音敏感的排序规则中它们是不同的。
至少对于Ms Sql Server,如果要比较存储在不同排序规则中的两个字符串,则必须使用其他答案中已提到的COLLATE
子句告知服务器在比较中使用哪种排序规则。不确定如何在其他数据库中完成此操作。
如果您的表包含一行,其中包含一个包含文本ÖBc
的列,并且您从此表中选择如下:
select COL from TBL where COL = 'obc'
然后使用像latin1_general_ci_ai
这样的大小写和重音不敏感的排序规则找到该行。重音不敏感意味着O
和Ö
是相同的,并且不区分大小写会解决案例不匹配问题。
使用相同的选择和归类latin1_general_cs_ai
,由于区分大小写,将无法找到该行。
与排序规则latin1_general_ci_as
类似,由于重音敏感度,将无法找到该行。
排序还用于在排序结果时确定按字母顺序排序。这将确定大小写字符的排序方式是否不同,以及重音字符的排序方式。