MySQL开发规范-字符集介绍

字符集(Charset)

是一个系统支持的全部抽象字符的集合。字符是各类文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
 
MySQL数据库的字符集:
  • 字符集(CHARACTER) 这个好理解
  • 校对规则(COLLATION) 即排序规则
 
MySQL中常见的字符集:
  • UTF8 (utf8mb4用的比较多一些)
  • LATIN1
  • GBK
 
常见校对规则:
  • ci: 大小写不敏感
  • cs或bin: 大小写敏感
 
对于字符集和字符序补充:
什么是字符集、字符序?简单的来讲:
字符集(character set):定义了字符以及字符的编码。
字符序(collation):定义了字符的比较规则。
举个例子:
有四个字符:A、B、a、b,这四个字符的编码分别是A = 0, B = 1, a = 2, b = 3。这里的字符 + 编码就构成了字符集(character set)。
若是咱们想比较两个字符的大小呢?好比A、B,或者a、b,最直观的比较方式是采用它们的编码,好比由于0 < 1,因此 A < B。
另外,对于A、a,虽然它们编码不一样,但咱们以为大小写字符应该是相等的,也就是说 A == a。
这上面定义了两条比较规则,这些比较规则的集合就是collation。
一样是大写字符、小写字符,则比较他们的编码大小;
若是两个字符为大小写关系,则它们相等。

  

咱们可使用如下命令查看:
– show charset;
– show collation;
 
查看当前数据库支持的字符集,以及其对应的默认校对规则和存储最大字符长度

 

查看utf8支持的校对规则

 

MySQL字符集级别

服务器端字符集:控制的是,存到mysql中时,字符集控制

客户端字符集: 控制的是用户的输入及显示

系统字符集: 控制的是系统相关的显示,和一些依赖于操做系统的应用

在生产中咱们必须保证操做系统、MySQL客户端实例、MySQL服务器端的字符集保持一致mysql

 

1. 操做系统字符集设置

source /etc/sysconfig/i18n
[root@db02 logs]# echo $LANG
zh_CN.UTF-8

  

2. MySQL实例级别

 
方法1: 在编译安装时候就指定以下服务器端字符集

cmake .
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \

 

方法2: 在配置文件中设置sql

[mysqld]
character-set-server=utf8

  

3. Mysql实例客户端级别

第一种方式:
临时生效单条命令法
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

  

 
第二种方式:
经过修改my.cnf实现修改mysql客户端的字符集,配置方法以下。

[client]
default-character-set=utf8

  

注意:若是咱们在建立数据库或者表时指定好字符集以后,那么这个数据库或者表就以建立时指定的字符集为准,将忽略配置文件中的字符集。
 
建立数据库
CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET utf8 */ 
create database oldboy DEFAULT CHARACTER SET UTF8 DEFAULT COLLATE = utf8_general_ci;

  

建立表数据库

CREATE TABLE `test` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8

  

获取帮助并查询

help create database;
show character set;

  

若是都没有作,咱们想要在生产环境中更改数据库的字符集?

alter database oldboy CHARACTER SET utf8 collate utf8_general_ci;
alter table t1 CHARACTER SET latin1;
注意:更改字符集时,必定要保证由小往大改,后者必须是前者的严格超集。生产中别随便改。必定要反复确认。
相关文章
相关标签/搜索