Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 什么是';核对SQL拉丁语通用CP1 CI AS';做_Sql Server_Database_Tsql_Collation - Fatal编程技术网

Sql server 什么是';核对SQL拉丁语通用CP1 CI AS';做

Sql server 什么是';核对SQL拉丁语通用CP1 CI AS';做,sql-server,database,tsql,collation,Sql Server,Database,Tsql,Collation,我使用SQL查询在SQLServer中创建数据库,如下所示: 创建数据库数据库 在…上 (名称='yourdb_dat', 文件名='c:\program files\microsoft sql server\mssql.1\mssql\data\yourdbdat.mdf', 大小=25mb, 最大大小=1500mb, 文件增长=10mb) 登录 (名称='yourdb_log', 文件名='c:\program files\microsoft sql server\mssql.1\mssql

我使用SQL查询在SQLServer中创建数据库,如下所示:

创建数据库数据库
在…上
(名称='yourdb_dat',
文件名='c:\program files\microsoft sql server\mssql.1\mssql\data\yourdbdat.mdf',
大小=25mb,
最大大小=1500mb,
文件增长=10mb)
登录
(名称='yourdb_log',
文件名='c:\program files\microsoft sql server\mssql.1\mssql\data\yourdblog.ldf',
大小=7mb,
最大大小=375mb,
文件增长=10mb)
核对SQL拉丁语通用CP1 CI AS;
去
它运行良好

虽然SQL的其余部分很清楚,但我对
校对SQL\u拉丁1\u常规\u CP1\u CI\u AS
的功能相当困惑

谁能给我解释一下吗?另外,我想知道以这种方式创建数据库是否是最佳做法?

COLLATE关键字指定用于字符串值的字符集和规则(顺序、对峙规则)的类型

例如,在本例中,您使用的拉丁语规则不区分大小写(CI)和区分重音(AS


您可以参考此

设置数据库服务器排序(比较文本片段)的方式。在这种情况下:

SQL_Latin1_General_CP1_CI_AS
分成有趣的部分:

  • latin1
    使服务器使用字符集latin 1(基本上是ascii)处理字符串
  • CP1
    代表代码页1252
  • CI
    不区分大小写的比较,因此“ABC”等于“ABC”
  • AS
    区分重音,因此'u'不等于'u'

  • p.S.有关详细信息,请确保。

    这指定了数据库的默认排序规则。除非指定不同的排序规则,否则在数据库表中创建的每个文本字段都将使用该排序规则

    数据库始终具有默认排序规则。如果未指定任何排序规则,则使用SQL Server实例的默认排序规则

    您使用的排序规则的名称显示它使用了Latin1代码页1,不区分大小写(CI)和重音(AS)。此排序规则在美国使用,因此它将包含在美国使用的排序规则


    排序规则决定如何比较文本值的相等性和相似性,以及排序时如何进行比较。代码页用于存储非unicode数据,例如varchar字段。

    CP1表示“代码页1”-从技术上讲,这转换为代码页1252

    请注意,接受的答案有点不完整。是的,在最基本的级别上,排序规则处理排序。但是,所选排序规则定义的比较规则在用户查询用户数据之外的许多地方使用

    如果“什么是
    COLLATE SQL\u Latin1\u General\u CP1\u CI\u AS
    do?”表示“创建数据库的
    COLLATE
    子句做了什么?”,那么:
    CREATE DATABASE
    语句的
    COLLATE{collation\u name}
    子句指定数据库的默认排序规则,而不是服务器;数据库级别和服务器级别的默认排序规则控制不同的内容

    服务器(即实例)-级别控制:

    • 系统数据库的数据库级排序:
      master
      model
      msdb
      tempdb
    • 由于控制
      tempdb
      的数据库级排序规则,因此它是临时表(全局和本地)中字符串列的默认排序规则,而不是表变量
    • 由于控制
      master
      的数据库级排序规则,因此它是用于服务器级数据的排序规则,例如数据库名称(即
      sys.databases
      中的
      name
      列)、登录名等
    • 参数/变量名称的处理
    • 游标名称的处理
    • 处理
      GOTO
      标签
    • 缺少
      COLLATE
      子句时,用于新创建数据库的默认排序规则
    数据库级控件:

    • 用于新创建的字符串列的默认排序规则(
      CHAR
      VARCHAR
      NCHAR
      NVARCHAR
      TEXT
      NTEXT
      ——但在列定义中缺少
      COLLATE
      子句时,不要使用
      TEXT
      NTEXT
      )。这适用于
      CREATE TABLE
      ALTER TABLE。。。添加
      语句
    • 用于字符串文本(即
      'some text'
      )和字符串变量(即
      @StringVariable
      )的默认排序规则。此排序规则仅在将字符串和变量与其他字符串和变量进行比较时使用。将字符串/变量与列进行比较时,将使用列的排序规则
    • 用于数据库级元数据的排序规则,例如对象名称(即
      sys.objects
      )、列名(即
      sys.columns
      )、索引名称(即
      sys.indexes
      )等
    • 用于数据库级对象的排序规则:表、列、索引等
    另外:

    • ASCII是一种8位编码(通常使用;从技术上讲,“ASCII”是7位,字符值为0-127,“ASCII扩展”是8位,字符值为0-255)。这一群体在不同文化中是相同的
    • 代码页是扩展ASCII的“扩展”部分,控制哪些字符用于值128-255。这一群体因文化而异
    • Latin1
      并不意味着“ASCII”,因为标准ASCII只包含值0-127,所有代码页(可以在SQL Server中表示,甚至
      NVARCHAR
      )都将这些相同的128个值映射到相同的字符
    如果“什么是
    collatesql\u Latin1\u General\u CP1\u CI\u AS
    do?”表示“这个特殊的排序规则做什么?”,那么:
    • 由于该名称以
      SQL\uuu
      开头,因此这是一个