冷知识点:COLLATE 关键字是什么意思?
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 关键字是什么意思?的更多相关文章
- 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类
不多说,直接上干货! 牛客网Java刷题知识点之关键字static static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中st ...
- mysql中的collate关键字是什么意思?
CREATE TABLE `tb_order` ( `order_id` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '订单id', `paym ...
- python 冷知识点
# int could accept parameters in bool type.int(True) # result is 1 int(False) # result is 0 reprlib. ...
- C语言偏冷知识点汇总
1.C语言函数声明中参数类型写在右括号后是什么意思?如下代码所示: int add(a, b) int a; int b; { return a + b; } 像这样的声明是什么意思,我测试过在gcc ...
- Java基础(二)--this关键字及初始化
构造器: 构造器的名称必须和类名完全相同,所以一般方法的"首字母小写"命名规则并不适合构造器 默认构造器: 也叫无参构造器,作用就是创建一个默认对象,如果你不是手写出来,编译器默认 ...
- 深入理解Java中的final关键字
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...
- 安卓冷知识:LayoutParams
安卓的布局有很多种,每种都有对应的LayoutParams类,那么它们之间到底是什么关系? 为什么在编写Layout的XML文件时,有的layout_前缀属性有用有的没有用? 一句话道出LayoutP ...
- (转)深入理解Java中的final关键字
转自:http://www.importnew.com/7553.html Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方 ...
- Java的final关键字详解
Java中的final关键字非常重要,它可以应用于类.方法以及变量.这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使 ...
随机推荐
- ZZW_shell脚本中的调用MYSQL传参及注意的问题
[oracle@ip9140 db_pcc]$ cat zzw_cc.sh #!/bin/bash z_user='pcc_csuser22'z_pass='pcc_csuser22'z_db='db ...
- mycat 入门使用例子
目的:有 user 和 t_order 两张数据表,表 user 的数据全部存放在 db1_zhang 中,表 t_order 的数据按 id 对 2 取模分别存放在 db1_zhang 和 db2_ ...
- 纯CSS实现Div高度根据自适应宽度(百分百调整)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- jdbc从基础到优化
package com.xk.demotest.tools; import java.io.IOException; import java.io.InputStream; import java.s ...
- docker-compose docker启动工具,容器互联
简介: docker可以一条命令就运行一个配置好的服务器,很是方便. 但是也有一个问题就是,当参数比较多,映射目录比较多,映射端口比较多………… 我以前就是写个脚本,用脚本来启动,很low啊. 也见到 ...
- elastic search 常用查询
1.查询mapping curl -X GET "10.0.38.111:1200/metric_data_bus_2018-08-07/_mapping/data_bus?pretty&q ...
- 神州数码OSPF路由协议
实验要求:熟练掌握OSPF配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 ip addres ...
- TX锁处理
实际处理后,在测试环境中模拟还原TX锁,及处理. 本篇博客目录: 1.TX锁模拟实际环境 2.登陆数据库,查询相关信息 3.确认锁源头,kill进程释放资源 一.TX锁模拟 sess_1 SQL> ...
- Vue.js学习使用心得(四)——组件
一.组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界 ...
- day05 判断敏感字符
1.判断一个字符是不是敏感字符: in 1.str v ="年龄多大了" if "大" in v: print("敏感") 2.list/t ...