环境:5.6
基础概念:
字符(字符)是指人类语言中最小的表义符号,例如' A ', ' B '等;
编码(编码)是指给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符。例如,我们给字符' A '赋予数值0,给字符“B”赋予数值1,则0就是字符' A '的编码;
字符集(字符集)是指字符和编码对组成的集合。
字符序(排序)是指在同一字符集内字符之间的比较规则。
MySQL中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头;以_ci(表示大小写不敏感),_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾,例如:在字符序“utf8_general_ci”下,字符“a”和“a”是等价的;
mysql>显示变量如“字符%”;——查看MySQL字符集设置MySQL字符集设置
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| | Variable_name |价值?系统变量:
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| character_set_client | utf8 | - character_set_client:客户端来源数据使用的字符集,
| character_set_connection | utf8 | - character_set_connection:连接层字符集
| character_set_database | latin1 |中的一个——character_set_database:当前选中数据库的默认字符集
| character_set_filesystem二进制| | - character_set_filesystem:文件系统字符集
| character_set_results | utf8 | - character_set_results:查询结果字符集
| character_set_server | latin1 |中的一个——character_set_server:内部操作字符集(服务器的字符集)
| character_set_system | utf8 | - character_set_system:系统元数据(字段名等)字符集
| character_sets_dir |/usr/share/mysql/charsets/|,
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
8行集(0.00秒)
详细解释:
1只
服务器(数据)端的字符集和排序,可以分成四级逐层指定——服务器、数据库、表、列。当MySQL存取位于某一列(列)的数据时,如果栏的字符集和排序没有指定,就会向上追溯表的;如果表也没有指定字符集和排序,就以数据库的字符集和排序作为默认值;如果数据库仍旧没有指定,那么就以服务器的字符集和排序作为默认值。
2.
服务器的字符集和排序的默认值又是从哪里来的呢?答案是,配置文件(my.ini)和mysqld(或者mysqld-nt)的命令行参数中都可以指定。如果不幸的,你根本没有在my.ini或者命令行中指定,那么MySQL就会使用编译MySQL时指定的默认字符集——latin1。中的一个
3.
数据字符集转换过程:
character_set_client→character_set_connection→character_set_(列、表、数据库、服务器)→character_set_results
MySQL默认字符集
MySQL对于字符集的指定可以细化到一个数据库,一张表,一列。传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置。
(1)编译MySQL时,指定了一个默认的字符集,这个字符集是latin1;中的一个
(2)安装MySQL时,可以在配置文件(my.ini)中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
(3)启动mysqld时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时character_set_server被设定为这个默认的字符集;
(4)安装MySQL选择多语言支持,安装程序会自动在配置文件中把default_character_set设置为utf - 8,保证缺省情况下所有的数据库所有表的所有列的都用utf - 8存储。
mysql>创建数据库演示;——创建数据库未指定字符集,使用默认字符集创建数据库
查询好了,1行影响(0.00秒)
mysql>显示数据库;
+ - - - - - - - - - - - - - - - - - - - - - - +
数据库| |
+ - - - - - - - - - - - - - - - - - - - - - - +
| information_schema |
演示| |
mysql | |
| performance_schema |
测试| |
+ - - - - - - - - - - - - - - - - - - - - - - +
5行集(0.00秒)
mysql>显示创建数据库演示\ G;——查看创建数据库时使用的什么字符集。