我有一个SQL查询来在SQLServer中创建数据库,如下所示:
create database yourdb
on
( name = 'yourdb_dat',
filename = 'c:\program files\microsoft sql server\mssql.1\mssql\data\yourdbdat.mdf',
size = 25mb,
maxsize = 1500mb,
filegrowth = 10mb )
log on
( name = 'yourdb_log',
filename = 'c:\program files\microsoft sql server\mssql.1\mssql\data\yourdblog.ldf',
size = 7mb,
maxsize = 375mb,
filegrowth = 10mb )
COLLATE SQL_Latin1_General_CP1_CI_AS;
go
运行良好。
虽然SQL的其余部分很明显,但我对COLLATE SQL_Latin1_General_CP1_CI_AS
的功能感到困惑。
任何人都可以向我解释这个吗?另外,我想知道以这种方式创建数据库是最佳做法吗?
答案 0 :(得分:207)
它设置数据库服务器的排序方式。在这种情况下:
SQL_Latin1_General_CP1_CI_AS
分成有趣的部分:
latin1
使服务器使用charset latin 1处理字符串,基本上是ascii CP1
代表Code Page 1252 CI
不区分大小写的比较,因此'ABC'将等于'abc'AS
重音敏感,所以'ü'不等于'u'P.S。有关详细信息,请务必read @solomon-rutzky's answer。
答案 1 :(得分:23)
CP1表示“代码页1” - 从技术上讲,这转换为代码页1252
答案 2 :(得分:15)
COLLATE 关键字指定您用于字符串值的字符集和规则(顺序,对抗规则)。
例如,在您的情况下,您使用的是拉丁语规则,不区分大小写( CI )和重音敏感( AS )
您可以参考此Documentation
答案 3 :(得分:8)
这指定数据库的默认排序规则。您在数据库中的表中创建的每个文本字段都将使用该排序规则,除非您指定其他字段。
数据库始终具有默认排序规则。如果未指定any,则使用SQL Server实例的默认排序规则。
您使用的排序规则的名称显示它使用Latin1代码页1,不区分大小写(CI)和重音敏感(AS)。此排序规则在美国使用,因此它将包含在美国使用的排序规则。
排序规则决定如何比较文本值的相等性和相似性,以及在排序时如何比较它们。在存储非unicode数据时使用代码页,例如, varchar fields。