• SQL Server Collation解惑


           某些产品会有固定的DB Collation,如果提前创建DB的时候没有按照要求指定对应的Collation,这个时候就会报错,提示你Collation不匹配。在安装SQL Server的时候有时候需要有区分大小写的要求,只是在安装的时候改变Collation成CaseSensitive(区分大小写),其实至始至终也不明白Collation在SQL Server中的作用到底是什么。

    Collation到底是什么?

    说白了Collation其实就是描述了数据在数据库中是按照什么规则来描述字符,以及字符在数据库中如何排序和比较的,Collation 是由两部分组成的(前半部是SQL所支持的字符集,后半部分指的是SQL的排序规则),举个例子:

    Chinese_PRC_90_CI_AS_KS ——》由“Chinese_PRC_90”(前半部分支持中国大陆的字符集)和“CI_AS_KS ”(后半部分排序规则)组成。

    • _CI(CS)表示是否区分字母大小写,CI不区分,CS区分。如果区分大小写,那么排序的时候小写字母的排在大写的前面;如果不区分大小写,那么排序的时候视大小写字母相同。
    • _AI(AS) 表示是否区分重音,AI不区分,AS区分。如果不区分重音,那么排序的时候视“a”和“ấ”为相同字符
    • _KI(KS) 表示是否区分假名类型,KI不区分,KS区分。在日语中应用。
    • _WI(WS) 表示是否区分全半角,WI不区分,WS区分。半角是单字节,全角是双字节。

     

    SQL Server Collation的级别

    • Server Level Collation: 安装SQL Server 的时候给Instance指定的Collation规则(比如说我们指定的区分大小写之类的)
    • Database Level Collation:在创建Database的时候指定的Collation规则
    • Column Level Collation: 给Database表增加行的时候,给行指定的Collation规则
    • Expression Level Collation: 在执行SQL 查询语句的时候加的Collation规则

    如何update已创建好的Collation?

    对于Server Level Collation的更改(更新有风险,更新需谨慎啊,对Server Collation更新后,之前保存的数据将会全部丢失)

    对于Server Level Collation的更改需要注意几个地方:

    1. 首先指向到安装目录下setup.exe这一层
    2. 如果是Windows认证模式,不需要指定【SAPWD=StrongPassword】
    3. 如果是混合认证模式,使用sa用户认证,则必须指定【SAPWD=StrongPassword】,否则会报错

    update的代码:

    Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName 
    /SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ] 
    /SQLCOLLATION=CollationName

     Sql2                         

    验证Collation是否成功Update:

    Sql5

    对于Database Level Collation的更改

    1. 使用SQL Server Management Studio

    sql3

    2. 使用SQL语句:

    ALTER DATABASE DataBaseName
    COLLATE Chinese_PRC_90_CI_AS_KS ;
    GO

    ————————————————————————————————

    WHOOOOSHHHHHHHHHHHH…………

    Blimey what was that?

    That was your life mate

    Oh, I was not quite ready. Can I have another go?

    Sorry mate, only one per person.

  • 相关阅读:
    java面试题之简单介绍一下集合框架
    java面试题之hashcode相等两个类一定相等吗?equals呢?相反呢?
    java面试题之什么是ThreadLocal?底层如何实现的?
    java面试题之stop()和suspend()方法为何不不推荐使⽤?
    设计模式—单例模式
    Java并发—同步容器和并发容器
    Java并发—并发工具类
    Java并发—原子类,java.util.concurrent.atomic包(转载)
    Java并发—java.util.concurrent.locks包
    Java并发—java.util.concurrent并发包概括(转载)
  • 原文地址:https://www.cnblogs.com/taoSir/p/4243898.html
Copyright © 2020-2023  润新知