MySQL字符集与排序规则 北京MySQL DBA学习

  MySQL提供了多种字符集和排序规则选择,其中字符集设置和数据存储以及客户端与MySQL实例的交互相关,排序规则和字符串的对比规则相关。

  字符集的设置可以在MySQL实例、数据库、表、列四个级别。MySQL设置字符集支持在InnoDB、MyISAM、Memory三个存储引擎。查看当前MySQL支持的字符集的方式有两种,一种是通过查看information_schema.character_set系统表,一种是通过命令show
character
set查看每个指定的字符集都会有一个或多个支持的排序规则,可以通过两种方式查看,一种是查看information_schema.collations表,另一种是通过show
collation命令查看。

  不同的字符集不可能有相同的排序规则,因为每个字符集都会有一个默认的排序规则。

  排序规则:

  每个字符集可以对应多个排序规则,但每个排序规则只能对应一个字符集。

  排序规则的命令通常是以对应的字符集的名字为开头,并以自己的特定属性结尾,比如排序规则utf8_general_ci和latin1_swedish_ci就分别是对应utf8和latin1字符集的排序规则。

  当排序规则特指某种语言时,则中间的部分就为这种语言的名字,比如utf8_turkish_ci和utf8_hungarian_ci就代表UTF8字符集中的土耳其语和匈牙利语。

  排序规则名字的结尾字符代表是否大小写敏感,口音敏感以及是否是二进制的。

  当排序规则名字中没有指定_as或者_ai时,是否口音敏感由_ci或者_cs决定,当使用的是_ci,则暗指_ai,反之则暗指_as。对Unicode的字符集来说,对应的排序规则也可能会包含unicode排序算法的版本号。

  互联网企业大多用的数据库是MySQL的,想要众多的IT工作者中脱颖而出,就需要拥有高深的技术,学习增值是必不可少的。学习之路,是贵在坚持的。老男孩教育MySQL
DBA课程,几经更新课程,杜绝纸上谈兵,全企业真实案例结合理论授课,想深入的学习MySQL DBA的知识,可以关注下老男孩教育。

原文地址:http://blog.51cto.com/13543192/2119577

时间: 2024-07-31 14:27:03

MySQL字符集与排序规则 北京MySQL DBA学习的相关文章

MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题

Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字段ishaspic:新添字段时,报错 [SQL] alter table WorkTask add ishaspic int(10) Null;[Err] 1034 - Incorrect key file for table 'WorkTask'; try to repair it 解决方案:新建

Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结

Mysql中的排序规则utf8_unicode_ci.utf8_general_ci的区别总结 用了这么长时间,发现自己竟然不知道utf_bin和utf_general_ci这两者到底有什么区别.. ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的; bin 是二进制, a 和 A 会别区别对待. 例如你运行: SELECT * FROM table WHERE txt = 'a' 那么在utf8_bin中你就找不到 txt

Mysql字符集与校对规则

字符集是一套字符和编码的集合,校对规则是用于比较字符集的一套规则. 所以字符集有两部分组成字符集合和对应的编码集合.比如说,现在有这几个字符:A B a b, 假设它们对应的编码分别是00, 01, 10, 11,那么ABab和[00,01,10,11]就组成了一套字符集.那么校对规则的作用就是规则A<B还是A>B.假设我们规定A<B,A=a,B=b,这个规定就组成了一个校对规则.当然我们也可以规定A>B,A>a,a>b这样也是一套校对规则.所以一个字符集可以有多套的校

数据库字符集与排序规则(Character Set And Collation)

数据库需要适应各种语言和字符就需要支持不同的字符集(Character Set),每种字符集也有各自的排序规则(Collation). (注意:Collation原意为校对,校勘,但是根据实际使用场景,觉得还是翻译为排序规则比较合适) 在绝大部分情形中,使用何种字符集和排序规则决定于服务器,数据库和表的级别,一般SQL操作不必关心这些. 以下操作均以MySQL为例. 查看数据库支持的字符集与排序规则 查看字符集: SHOW CHARACTER SET; 部分结果: 查看排序规则:(后缀"_cs&

mysql建数据库的字符集与排序规则

1.字符集说明: 一般选择utf8.下面介绍一下utf8与utfmb4的区别.utf8mb4兼容utf8,且比utf8能表示更多的字符.unicode编码区从1 - 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8mb4扩充区,什么时候你需要存储那些字符,你才用utf8mb4,否则只是浪费空间. 2.排序规则 排序一般分为两种:utf_bin和utf_general_cibin 是二进制, a 和 A 会别区别对待.例如你运行:SELECT * FROM ta

mysql字符集与校对规则---大小写敏感那点事

在关系型数据库中,oracle/sql_server/db2都有对数据进行区分大小写,不过mysql有点奇怪,对数据不区分大小写,详细情况请看下面解析. MySQL在Linux下数据库名.表名.列名.别名大小写的默认规则是这样的: 1.数据库名与表名是严格区分大小写的. 2.表的别名是严格区分大小写的. 3.列名与列的别名在所有的情况下均是忽略大小写的. 4.字段内容(即数据)默认情况下是大小写不敏感的. 5.变量名(函数和存储过程)也是严格区分大小写的. 所以不禁我们就会想去修改,而控制这些的

MySql数据库字段排序规则不一致产生的一个问题

最近项目向MySql迁移,迁移完毕后,在获取用户权限时产生了一个异常,跟踪进去获取执行的语句如下, SELECT PermissionId FROM spysxtPermission WHERE (ResourceCategory = 'BaseUser' AND ResourceId = '003bf4bd072243fa90517ee2bc088cb7' AND Enabled = 1 AND DeletionStateCode = 0) UNION SELECT PermissionId

Mysql字符集以及校对规则

编码:计算机都是二进制存储,因此需要将显示符号转换成二进制数才能存储,每个字符所转换成的二进制数,就是字符编码. 字符集 字符用于显示的抽象符号.字符集是一套字符与字符编码的集合. 常见的字符集编码: Ascii字符集,GB2312字符集,gbk字符集,latin1字符集,unicode字符集等. show character set;可以获得MySQL支持的所有字符集. 修改数据库字符集 alter database liguodong character set utf8; MySQL可以使

MySQL - 新建数据库的字符集与排序规则说明

我们在新建数据库时(Navicat)界面时会遇到这两个选项: 1.字符集 一般选择utf8. 下面介绍一下utf8与utfmb4的区别: utf8mb4兼容utf8,且比utf8能表示更多的字符.至于什么时候用,看你的做什么项目了,到这里可以查看unicode编码区从1 - 126就属于传统utf8区. 当然utf8mb4也兼容这个区,126行以下就是utf8mb4扩充区,什么时候你需要存储那些字符,你才用utf8mb4,否则只是浪费空间. 2.排序说明 排序一般分为两种:utf_bin和utf