mysql 数据库表:

CREATE TABLE `book_order_test` (
`order_id` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '订单id',
`payment` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '实付金额。精确到2位小数;单位:元。如:200.07,表示:200元7分',
`payment_type` int(2) DEFAULT NULL COMMENT '支付类型,1、在线支付,2、货到付款',
`post_fee` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '邮费。精确到2位小数;单位:元。如:200.07,表示:200元7分',
`status` int(10) DEFAULT NULL COMMENT '状态:1、未付款,2、已付款,3、未发货,4、已发货,5、交易成功,6、交易关闭',
`create_time` datetime DEFAULT NULL COMMENT '订单创建时间',
`update_time` datetime DEFAULT NULL COMMENT '订单更新时间',
`payment_time` datetime DEFAULT NULL COMMENT '付款时间',
`consign_time` datetime DEFAULT NULL COMMENT '发货时间',
`end_time` datetime DEFAULT NULL COMMENT '交易完成时间',
`close_time` datetime DEFAULT NULL COMMENT '交易关闭时间',
`shipping_name` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '物流名称',
`shipping_code` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '物流单号',
`user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
`buyer_message` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '买家留言',
`buyer_nick` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '买家昵称',
`buyer_rate` int(2) DEFAULT NULL COMMENT '买家是否已经评价',
UNIQUE KEY `order_id` (`order_id`) USING BTREE,
KEY `create_time` (`create_time`),
KEY `buyer_nick` (`buyer_nick`),
KEY `status` (`status`),
KEY `payment_type` (`payment_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

COLLATE 关键字是什么意思?

关键字

collation_name

按照二进制编码比较排序,主要是对字符集之间的比较和排序,可以通过 show collation查看所有的校对集。

官方解释:是应用于表达式、列定义或数据库定义的排序规则的名称。

collate的名字包括两部分,前部分是表示字符集,后部分定义如下:

分类 说明
_BIN 指定使用向后兼容的二进制排序顺序。
_BIN2 指定使用 SQL Server 2005中引入的码位比较语义的二进制排序顺序。
_CI(CS) 是否区分大小写,CI不区分,CS区分
_AI(AS) 是否区分重音,AI不区分,AS区分
_KI(KS) 是否区分假名类型,KI不区分,KS区分
_Stroke 按笔划排序
_WI(WS) 是否区分全半角,WI不区分,WS区分

还可以根据拼音,笔画来排序。

如何设置排序规则

可以在数据库(create database/alter database时指定),字段级别(create table/alter table时指定)使用Collate命令设置collate,字段级别优先级更高

语法

语法
COLLATE < collation_name >

< collation_name > ::=
{ Windows_collation_name } | { SQL_collation_name }

参数

collation_name

可以只是指定的 Windows_collation_name 或 SQL_collation_name。

  • Windows_collation_name

是 Windows 排序规则的排序规则名称。请参见 Windows 排序规则名称。

  • SQL_collation_name

SQL 排序规则的排序规则名称。请参见 SQL 排序规则名称。

注释

COLLATE 子句可以在几个级别上指定,包括以下级别:

  • 创建或更改数据库。

可以使用 CREATE DATABASE 或 ALTER DATABASE 语句的 COLLATE 子句指定数据库的默认排序规则。还可在创建数据库时使用 SQL Server 企业管理器指定排序规则。如果不指定排序规则,则将为数据库指派 SQL Server 实例的默认排序规则。

  • 创建或更改表列。

可以使用 CREATE TABLE 或 ALTER TABLE 语句的 COLLATE 子句指定每个字符串列的排序规则。还可在创建表时使用 SQL Server 企业管理器指定排序规则。如果不指定排序规则,将为列指派数据库的默认排序规则。

还可使用 COLLATE 子句中的 database_default 选项,指定临时表中的列使用连接的当前用户数据库(而不是 tempdb)的默认排序规则。

  • 投影表达式的排序规则。

可以使用 COLLATE 子句将字符表达式投影到特定的排序规则。将为字符字面值和变量指派当前数据库的默认排序规则。将为列引用指派列的定义排序规则。有关表达式排序规则的信息,请参见排序规则的优先顺序。


标识符的排序规则取决于定义标识符时所在的级别。为实例级对象(如登录名和数据库名)的标识符指派实例的默认排序规则。为数据库对象(如表、视图和列名)的标识符指派数据库的默认排序规则。例如,对于名称差别仅在于大小写的两个表,可在使用区分大小写排序规则的数据库中创建,而不能在使用不区分大小写排序规则的数据库中创建。

当连接上下文与数据库相关时,可以创建变量、GOTO 标签、临时存储过程和临时表,且当已将上下文切换到其它数据库时引用它们。变量、GOTO 标签、临时存储过程和临时表的标识符在实例的默认排序规则中。

COLLATE 子句只能应用于 char、varchar、text、nchar、nvarchar 和 ntext 数据类型。

排序规则一般由排序规则名标识。例外情况是:在安装过程中没有为 Windows 排序规则指定排序规则名称,而是指定排序规则指示器,然后选择复选框以指定区分或不区分大小写和重音的二进制排序或字典排序。

可以执行系统函数 fn_helpcollations 以检索 Windows 排序规则和 SQL 排序规则的所有有效排序规则名称的列表:

SELECT *
FROM ::fn_helpcollations()

SQL Server 只支持由基础操作系统支持的代码页。

当执行依赖排序规则的操作时,被引用对象所使用的 SQL Server 排序规则必须使用计算机上运行的操作系统所支持的代码页。

这些操作可包括:

  • 当创建或更改数据库时,为数据库指定默认排序规则。

  • 当创建或更改表时,为列指定默认排序规则。

  • 当还原或附加数据库时,操作系统必须支持数据库的默认排序规则,并支持数据库中的任何 char、varchar 和 text 列或参数的排序规则。

支持 char 和 varchar 数据类型的代码页转换,但是不支持 text 数据类型的代码页转换。不报告代码页转换过程中的数据丢失。

如果被引用的对象所使用或指定的排序规则使用 Windows® 不支持的代码页,则 SQL Server 将发出错误信息。

参考文档:

【官方文档1】

【官方文档2】

over

冷知识点:COLLATE 关键字是什么意思?的更多相关文章

  1. 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类

    不多说,直接上干货! 牛客网Java刷题知识点之关键字static static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中st ...

  2. mysql中的collate关键字是什么意思?

    CREATE TABLE `tb_order` ( `order_id` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '订单id', `paym ...

  3. python 冷知识点

    # int could accept parameters in bool type.int(True) # result is 1 int(False) # result is 0 reprlib. ...

  4. C语言偏冷知识点汇总

    1.C语言函数声明中参数类型写在右括号后是什么意思?如下代码所示: int add(a, b) int a; int b; { return a + b; } 像这样的声明是什么意思,我测试过在gcc ...

  5. Java基础(二)--this关键字及初始化

    构造器: 构造器的名称必须和类名完全相同,所以一般方法的"首字母小写"命名规则并不适合构造器 默认构造器: 也叫无参构造器,作用就是创建一个默认对象,如果你不是手写出来,编译器默认 ...

  6. 深入理解Java中的final关键字

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

  7. 安卓冷知识:LayoutParams

    安卓的布局有很多种,每种都有对应的LayoutParams类,那么它们之间到底是什么关系? 为什么在编写Layout的XML文件时,有的layout_前缀属性有用有的没有用? 一句话道出LayoutP ...

  8. (转)深入理解Java中的final关键字

    转自:http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方 ...

  9. Java的final关键字详解

    Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...

随机推荐

  1. Liblinear and Libsvm-rank训练数据的bash代码

    Liblinear and Libsvm-rank训练数据的bash代码: for j in "amazon_mp3" "video_surveillance" ...

  2. 团队项目(MVP------新能源无线充电管理网站)(个人任务3)

    现在我们组的项目已经完成了,之前做的欢迎界面已经废弃掉了,于是我重新制作了一个欢迎界面,主要是分为了团队介绍,充电商品的介绍,现在充电新闻的发展,解决方案,成功案例.其中产品里面又有两个商品的售卖页, ...

  3. ipa 注入 dylib

    前些日子再github找到了一个内存修改器 DLGMemor 免越狱在app内植入修改器,感觉很不错,就尝试去看看是否可行. 用到的工具:  Xcode 10. optool 首先要做的,安装 opt ...

  4. 判断手机是安卓还是ios

    let ORZ = function() { if(!(this instanceof ORZ)) { return new ORZ; }}ORZ.prototype = { // 判断用户手机是An ...

  5. php英语单词大全95

    abstract抽象的 -挨伯丝拽克特 access存取.访问 -挨克色丝 account账户 -厄靠恩特 action动作 -爱克身 activate激活 -爱克特维特 active活动的 -爱克得 ...

  6. c++ 11 移动语义

    C++ 已经拥有了拷贝构造函数, 和赋值函数,它们主要定位为浅和深度拷贝, 新增加一个移动构造函数,主要避免拷贝构造. 在定义了移动构造函数的情况下,在实参(argument)是一个右值(rvalue ...

  7. Gym - 101490F:Endless Turning (半平面交)

    pro:给定R条街道,现在小孩在某条街上骑车车,最开始他沿着所在街道向东(1,4象限的方向)驶去,如果他遇到街道的交叉口,他会右转.问他转N次后在哪个街道.有特殊情况是他一只遇不到交叉口,会沿着街道一 ...

  8. Golang基础之函数

    golang基础之函数 1.为什么需要函数? 有些相同的代码可能出现多次,如果不进行封装,那么多次写入到程序中,会造成程序冗余,并且可读性降低 2.什么是函数 为完成某些特定功能的程序指令集合称为函数 ...

  9. 【java多线程】队列系统之DelayQueue源码

    一.延迟队列 延迟队列,底层依赖了优先级队列PriorityBlockingQueue 二.延迟队列案例 (1)延迟队列的任务 public class DelayTask implements De ...

  10. MySQL Execution Plan--IN查询计划(2)

    在MySQL中,IN查找经常出现性能问题,相同SQL在MySQL不同版本中表现不同. 准备测试数据: ## 创建表tb001 CREATE TABLE tb001( id INT unsigned N ...