冷知识点: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的好处是什么?最后也有一些使 ...
随机推荐
- animation特效
在小程序中的使用: <view class='test1'> <image src='/images/light.png'></image> </view&g ...
- learning makeflie wildward character
“?” 匹配一个任意字符 “*” 匹配0个或任意多个字符,也就是可以匹配任何内容 “[]” 匹配中括号中任意一个字符.例如:[abc] ...
- 超恶心的TP模版取值
一.JS事件中 在使用H-uiAdmin做后台开发的时候,碰到了使用元素点击触发js函数展示弹窗的写法 但是在js函数中还需要使用U函数生成url以及使用$vo.id来传值 反复试了一下模版标签的写法 ...
- ﺑﯘﻟﺒﯘﻟﻼﺭ--思恋--IPA--维吾尔语
很美的维语歌曲, 迪里拜尔将之唱得十分动人心弦.
- sed语法2
sed命令是一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的.在shell中,使用sed来批量修改文本内容是非常方便的. sed命令的选项 sed ...
- Matlab_audiowrite_音频生成
输出音频文件所需函数为 audiowrite .通过例程进行解释: % 生成时间序列 fs = 5000; % [Hz] 信号采样频率 T = 1; % [s] 信号长度 x = 0:1/fs:T; ...
- DAY 04 while和for循环
1.结束while循环的两种方式: 1.修改条件:等到下一次循环开始判断条件为假时才会结束循环,剩余代码块依旧会执行 2.break:直接结束本层循环,跳过剩余代码 2.while+continue ...
- HttpURLConnection与HttpClient浅析
转自:https://blog.csdn.net/u012838207/article/details/82867701 HttpURLConnection与HttpClient浅析 1. GET请求 ...
- React Native 安卓 程序运行报错: React Native version mismatch(转载)
这个问题已经得到解决,参照stackoverflow上的问题:https://stackoverflow.com/que...这个问题的原因就处在Android工程中app/build.gradle中 ...
- C#中关于对out和ref的认识
1.两者都是按照地址进行传递的.2.ref关键字是的参数按照引用传递的方式进行.他的效果是控制权传递会调用方法是,可以对这个参数进行修改 要使用ref参数,那么方法的定义和调用方法都必须进行显示的 ...