mysql的字符集和整理是怎么一回事

来源:互联网 发布:java selenim设置超时 编辑:程序博客网 时间:2024/05/21 18:46

在MySQL数据库中,特别是创建表的时候,因为经常使用集成工具来创建,总是对一个词特别困惑,整理(collation),字符集很容易理解,就是数据库中的数据要用什么编码格式进行编码,那整理呢?

今天查了一下MySQL的开发文档,文档中对这个东西做了一个很有意思的描述,我把大概意思表述一下:

什么是整理

假如我们有一个字符的集合和对应的编码集合(因为计算机只认识数字,所以只能识别编码),集合如下:
A->0
B->1
a->2
b->3

OK,那A\B\a\b就称为字符集,而0,1,2,3就称为对应的编码,计算机存储的时候只存储0,1,2,3,只是当显示的时候才显示出字符来。

那当我们在字符集上做比较、特别是排序时怎么做?
1、一个很常见的思路是:比较编码的大小,编码大的认为字符值越大。于是如果对这四个字符排序,就是b,a,B,A
2、那如果我希望大小写无关呢?这个时候相当于又多加了一条规则,就是A=a,B=b,然后再此前提下比较大小。
3、你还可以定义出各种各样的规则

这个规则是必须的,是一种协议、或者说是一种约定。这个规则就是整理(collation)。

由此我们知道了,所谓整理就是定义在一组字符集上的规则。了解了这些,也就明白了下面这些结论:

  1. 两个不同的字符集不可能有相同的整理
  2. 每种字符集都有一个默认的整理规则,具体可以通过show character set来读取。(如下图所示)
  3. 整理的命名有个规范:1)字符名_语言名_ci/cs(case insensetive\case sensetive)、如utf8-general_ci、2)字符名_bin,表示二进制

如何查看MySQL服务器支持的字符集

通过show character set命令,由下图可见,MySQL服务器支持36种字符编码,在第三列显示的是默认整理方案
这里写图片描述

查看某数据库的字符集

方法有二:
一是通过use dbname,进入某系统之后,通过如下命令:
select @@character_set_database,@@collation_database;
这里写图片描述
二:不需要进入db,直接存储schema中的数据即可
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ‘db_name’;
这里写图片描述

0 0
原创粉丝点击