-----------------------------------------------------------------------------------
--3. 设置和更改数据库排序规则
-- 创建新数据库时,可以使用下列内容之一指定排序规则:
--CREATE DATABASE 语句的COLLATE 子句。
--SQL Server Management Studio.
--SQL 管理对象(SMO) 中的 Database.Collation 属性。
-- 如果未指定排序规则,则使用服务器排序规则。
-- 可以使用ALTER DATABASE 语句的 COLLATE 子句来更改在用户数据库中创建的任何新对象的排序规则。使用此语句不能更改任何现有用户定义的表中列的排序规则。使用 ALTER TABLE 的COLLATE 子句可以更改这些列的排序规则。
-- 更改数据库排序规则时,需要更改下列内容:
-- 数据库的默认排序规则,这一新的默认排序规则将应用于数据库中后续创建的所有列、用户定义的数据类型、变量和参数。根据数据库中定义的对象解析 SQL 语句中指定的对象标识符时,也使用新的默认排序规则。
-- 将系统表中的任何 char、 varchar 、text 、 nchar、 nvarchar 或ntext 列更改为使用新的排序规则。
-- 将存储过程和用户定义函数的所有现有 char 、varchar 、 text、 nchar 、nvarchar 或 ntext 参数和标量返回值更改为使用新的排序规则。
-- 将char 、 varchar、 text 、nchar 、 nvarchar 或 ntext 系统数据类型和基于这些系统数据类型的所有用户定义的数据类型更改为使用新的默认排序规则。
--SQL code :
-------------------------- 数据库 ---------------------------------------
--1. 将数据库的字符集修改为:
ALTER DATABASE [pratice] COLLATE Chinese_PRC_CI_AS
--2. 为数据库指定排序规则
CREATE DATABASE db COLLATE Chinese_PRC_CI_AS
GO
ALTER DATABASE db COLLATE Chinese_PRC_BIN
GO
ALTER DATABASE [pratice] COLLATE Chinese_PRC_CS_AS -- 区分大小写
ALTER DATABASE [pratice] COLLATE Chinese_PRC_CI_AS -- 不区分大小写
--------------------------- 表中的列 --------------------------------------
-- 为表中的列指定排序规则
CREATE TABLE tb
(
col1 VARCHAR (10 ) ,
col2 VARCHAR (10 ) COLLATE Chinese_PRC_CI_AS
)
GO
ALTER TABLE tb ADD col3 VARCHAR (10 ) COLLATE Chinese_PRC_BIN
GO
ALTER TABLE tb ALTER COLUMN col2 VARCHAR ( 10) COLLATE Latin1_General_CS_AS_KS_WS
GO
ALTER TABLE tb ALTER COLUMN colname NVARCHAR ( 100) COLLATE Chinese_PRC_CI_AS -- 不区分大小写
ALTER TABLE tb ALTER COLUMN colname NVARCHAR ( 100) COLLATE Chinese_PRC_CS_AS -- 区分大小写
---------------------------------------------------------------------
--3. 为字符变量和参数应用排序规则
DECLARE @a VARCHAR ( 10) ,
@b VARCHAR (10 )
SELECT @a = 'a' ,
@b = 'A'
-- 使用排序规则 Chinese_PRC_CI_AS
SELECT CASE WHEN @a COLLATE Chinese_PRC_CI_AS = @b THEN '@a=@b' --Chinese_PRC_CI_AS 不区分大小写
ELSE '@a<>@b'
END
-- 结果:@a=@b
-- 使用排序规则 Chinese_PRC_BIN
SELECT CASE WHEN @a COLLATE Chinese_PRC_BIN = @b THEN '@a=@b' --区分大小写
ELSE '@a<>@b'
END
-- 结果:@a<>@b