'COLLATE SQL_Latin1_General_CP1_CI_AS'有什么作用?

时间:2011-02-18 08:45:16

标签: sql-server database tsql collation

我有一个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的功能感到困惑。

任何人都可以向我解释这个吗?另外,我想知道以这种方式创建数据库是最佳做法吗?

4 个答案:

答案 0 :(得分:207)

它设置数据库服务器的排序方式。在这种情况下:

SQL_Latin1_General_CP1_CI_AS

分成有趣的部分:

  1. latin1使服务器使用charset latin 1处理字符串,基本上是ascii
  2. CP1代表Code Page 1252
  3. CI不区分大小写的比较,因此'ABC'将等于'abc'
  4. AS重音敏感,所以'ü'不等于'u'
  5. 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。