【MySQL管理维护-第5章】MySQL字符集一

字符集对于数据库中存储的数据来说非常之重要,特别是对于中文环境这类多字节编码的字符尤其特殊,设置不当就极有可能遇到乱码的情况。

一、关于字符集

数据库中的字符集究竟是什么?在数据库看来,字符集就是各种字符编码的一个集合。对于数据库来说,即使是同一个字符,不同的字符集在处理时它的编码格式都有可能不同。

总体来说,字符集就是指符号和字符编码的集合。

在数据库中应用字符集时,对于具体字符集的设置同样也非常的重要,为了能让字符正确地被保存,同时还能正确地被读取出来,到最终正确地显示给用户,这中间 每一个环节都涉及字符集(以及可能发生的转换),只有读和写时,会话所用字符集相互匹配(或者说兼容),最终显示的结果才会正确无误;否则,就会出现不希 望看到,但可能又确实常见的现象:乱码。

二、关于校对规则

校对规则就是指定义的一种比较字符集中字符的规则。也有些资料中将其称为排序规则。校对规则的核心就是比较字符编码的方式。

三、MySQL支持的字符集和校对规则

1、怎么知道MySQL数据库当前都支持哪些字符集?

可以使用SHOW CHARACTER SET语句,例如:

([email protected])[(none)]> show character set;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
| dec8     | DEC West European           | dec8_swedish_ci     |      1 |
| cp850    | DOS West European           | cp850_general_ci    |      1 |
| hp8      | HP West European            | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |
| swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |
ascii    | US ASCII                    | ascii_general_ci    |      1 |
| ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |
| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |
| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |
| tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |
| euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 |
| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |
| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 |
| greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |
| cp1250   | Windows Central European    | cp1250_general_ci   |      1 |
| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |
| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |
| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 |
| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |
| ucs2     | UCS-2 Unicode               | ucs2_general_ci     |      2 |
| cp866    | DOS Russian                 | cp866_general_ci    |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 |
| macce    | Mac Central European        | macce_general_ci    |      1 |
| macroman | Mac West European           | macroman_general_ci |      1 |
| cp852    | DOS Central European        | cp852_general_ci    |      1 |
| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 |
| utf8mb4  | UTF-8 Unicode               | utf8mb4_general_ci  |      4 |
| cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |
| utf16    | UTF-16 Unicode              | utf16_general_ci    |      4 |
| utf16le  | UTF-16LE Unicode            | utf16le_general_ci  |      4 |
| cp1256   | Windows Arabic              | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic              | cp1257_general_ci   |      1 |
| utf32    | UTF-32 Unicode              | utf32_general_ci    |      4 |
binary   | Binary pseudo charset       | binary              |      1 |
| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 |
| cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |      2 |
| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |      3 |
+----------+-----------------------------+---------------------+--------+
40 rows in set (0.01 sec)

就中文环境来说,最常用的字符集有下面几种:

GB2312:主要包含简体中文字符及常用符号,这种字符集对于中文字符采用双字节编码的格式,也就是说一个汉字字符在存储时会占两个字节。

GBK:包括有中、日、韩字符的大字符集,GB2312也是GBK的一个子集,就是说GB2312中的所有字符,GBK中全都有,这种情况下,我们也会将 GBK称为GB2312的超集,GBK也是双字节编码的格式。将子集中的字符转换成超集中保存不会丢失信息(不会乱码);但反之则不一定。因此对于超集字 符集降级转换成某个子集的操作,需要务必慎重,并反复检验结果,确认不出现丢失字符信息导致乱码的情况。

提示:此外,还有专门对应繁体中文的BIG5字符集,话说BIG5也是GBK的子集。

UTF8:它对于英文字符使用一个字节编码,而对于多字节字符(如中文)则使用3个字节编码,UTF8能够支持大部分常见字符,包括西、中、日、韩、法、俄等各种文字,因此可以将上面提到的几种字符集都视为UTF8的子集。

UTF8MB4:它是UTF8字符集的超集,UTF8能够支持的字符,它全都能支持,UTF8不能支持的字符,它也能支持。这是自MySQL 5.5版本才幵始新引入的字符集,其引入是为了处理像emoji这类表情字符。UTF8MB4字符集中,一个字符使用4个字节编码,能够支持的字符最广,但是相应占用的空间也最大。

2、如何确定某个字符集支持哪些校对规则?

一个字符集至少会拥有一个校对规则,显示字符集的校对规则可以使用SHOW COLLATION语句。

比如说,查看latinl字符集所拥有的校对规则:

([email protected])[(none)]> show collation like ‘latin1%‘;
+-------------------+---------+----+---------+----------+---------+
| Collation         | Charset | Id | Default | Compiled | Sortlen |
+-------------------+---------+----+---------+----------+---------+
| latin1_german1_ci | latin1  |  5 |         | Yes      |       1 |
| latin1_swedish_ci | latin1  |  8 | Yes     | Yes      |       1 |
| latin1_danish_ci  | latin1  | 15 |         | Yes      |       1 |
| latin1_german2_ci | latin1  | 31 |         | Yes      |       2 |
| latin1_bin        | latin1  | 47 |         | Yes      |       1 |
| latin1_general_ci | latin1  | 48 |         | Yes      |       1 |
| latin1_general_cs | latin1  | 49 |         | Yes      |       1 |
| latin1_spanish_ci | latin1  | 94 |         | Yes      |       1 |
+-------------------+---------+----+---------+----------+---------+
8 rows in set (0.00 sec)

Default列显示了校对规则是否是该字符集的默认规则。

MySQL数据库中字符集的校对规则都有一些共同的特点:

每种校对规则只能属于一种字符集,也就是说,不同字符集不可能拥有同一个校对规则。

每种字符集都拥有一个默认的校对规则(default collation), SHOW CHARACTER SET语句显示的结果中,也指明了字符集的默认校对规则。

校对规则的名称也有规则,通常开头的字符是校对规则所属的字符集,而后是其所属语言,最后则是校对规则类型的简写形式,有下列3种格式:

> _ci:全称为case insensitive,表示这是大小写不敏感的规则。

> _cs:全称为case sensitive,表示这是大小写敏感的规则。

> _bin:即binary,表示这是一个二元校对规则,话说二元校对规则也一定是 大小写敏感规则。

时间: 2024-08-24 07:12:35

【MySQL管理维护-第5章】MySQL字符集一的相关文章

【MySQL管理维护-第5章】MySQL字符集三

五.字符集操作示例 通过一个最简单的示例:"向某测试表插入记录,确保写入的记录能被正确地保存,并能被正常地读取". 先来创建一个测试表13,拥有3个列,并为每个列分别指定不同的字符集,所指定的3种字符集,也是目前MySQL环境最为常见的字符集,执行操作如下: ([email protected])[leedb]> use leedb;Database changed([email protected])[leedb]> ([email protected])[leedb]&

深入浅出MySQL开发优化和管理维护学习笔记之MySQL日志文件

一.配置文件分类与参数 错误日志 数据库启停过程中错误,运行过程中的异常. 保存方式: 文件 启用方式:无需使用开关参数启用,默认开启 相关参数 文件位置参数log_error,如果不指定值默认在DATADIR目录下,名称为host_name.error. 2.二进制(bin)日志 所有DDL和DML但不包含查询语句. 保存方式: 文件 启用方式:需要配置文件中设置开关参数启用,默认关闭(OFF) 文件位置参数log_bin,如果不指定名称,名称为host_name-bin.NUM:如果只指定名

高性能MySQL笔记:第1章 MySQL架构

MySQL 最重要.最与众不同的特性是他的存储引擎架构,这种架构的设计将查询处理(Query Precessing)及其系统任务(Server Task)和数据的存储/提取相分离. 1.1 MySQL 逻辑架构 基础服务层 第一层构架 :包含连接处理.授权认证.安全等基础服务功能: 核心服务层 第二层构架 :包含查询解析.分析.优化(包括重写查询.决定表的读取顺序.选择合适的索引等).缓存以及内置函数,所有跨存储引擎的功能也在这一层实现:存储过程.触发器.视图等: 存储引擎层 第三层构架 :响应

MySQL学习笔记——第2章 MySQL的安装与配置

在Windows下安装MySQL:http://jingyan.baidu.com/article/4b07be3c67853c48b380f311.html 在Linux下安装MySQL:http://blog.itblood.com/under-linux-mysql-latest-version-installation-diagram-tutorial.html

使用MySQL管理心得讲述

今天我们要和大家一起分享的是使用MySQL管理心得,我们大家都知道在windows中MySQL数据库其是以服务形式存在的,我们在使用前应确保此服务处于启动的状态,未启动可用net start MySQL命令启动. 而Linux中启动时可用"/etc/rc.d/init.d/MySQLd start"命令,注意启动者应具有MySQL管理员权限. 刚安装好的MySQL包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名

第09章 mysql 字符集

2015-10-24 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] 范德兰斯.MySQL开发者SQL权威指南 [M].北京:机械工业出版社,2008 [4] Forta.MySQL必知必会 [M].北京:人民邮电出版社,2009 [5] Mysql字符集设置 [6] 修改及查看mysql数据库的字符集 [7] MyS

第01章 mySQL用户和权限管理v1

韩立刚老师视频教学网站 http://www.91xueit.com 韩老师QQ458717185 第01章 MySQL用户和权限管理 mySQL权限控制通过两步控制,能不能连接(验证用户身份),能执行什么操作(验证用户权限). 验证用户身份,需要验证,连接mySQL的计算机的IP地址或计算机名称,用户账户和密码.验证过程如下: 管理mySQL用户 查看mySQL用户账户 mySQL用户存储在mysql数据库的user表,该表在mySQL服务启动时自动加载到内存,控制用户的登录. [[email

第15章 mysql 用户、权限管理

2015-10-24 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] 范德兰斯.MySQL开发者SQL权威指南 [M].北京:机械工业出版社,2008 [4] Forta.MySQL必知必会 [M].北京:人民邮电出版社,2009 [5] Chapter 6 Security [6] 5.7. MySQL访问权限系统

(DBA之路十)《深入浅出MySQL数据库开发优化与管理维护》的读书笔记

1>mysql的配置文件在/etc下的my.cnf 2)mysql服务是一系列后台进程,mysql数据库是一系列数据目录和数据文件 mysql数据库必须在mysql服务启动之后才可以进行访问 3)查看mysql服务的状态: netstat -nlp 4)启动/关闭服务 cd /usr/bin ./mysqld_safe & mysqladmin -uroot shutdown 5)PRM包安装的启动/关闭服务 service mysql start service mysql restart