1.字符(Character)是指人类语言中最小的表义符号。例如’A’、’B’等;
2.给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding)。例如,我们给字符’A’赋予数值0,给字符’B’赋予数值1,则0就是字符’A’的编码;
3.给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set)。例如,给定字符列表为{’A’,’B’}时,{’A’=>0, ‘B’=>1}就是一个字符集;
4.字符序(Collation)是指在同一字符集内字符之间的比较规则;
5.确定字符序后,才能在一个字符集上定义什么是等价的字符,以及字符之间的大小关系;
6.每个字符序唯一对应一种字符集,但一个字符集可以对应多种字符序,其中有一个是默认字符序(Default Collation);
7.MySQL中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头;以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾。例如:在字符序“utf8_general_ci”下,字符“a”和“A”是等价的;
二、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.系统变量:
– character_set_server:默认的内部操作字符集
– character_set_client:客户端来源数据使用的字符集
– character_set_connection:连接层字符集
– character_set_results:查询结果字符集
– character_set_database:当前选中数据库的默认字符集
– character_set_system:系统元数据(字段名等)字符集
– 还有以collation_开头的同上面对应的变量,用来描述字符序。
2.用introducer指定文本字符串的字符集:
– 格式为:[_charset] ’string’ [COLLATE collation]
– 例如:
SELECT _latin1 ’string’;
SELECT _utf8 ‘你好’ COLLATE utf8_general_ci;
– 由introducer修饰的文本字符串在请求过程中不经过多余的转码,直接转换为内部字符集处理。
四、修改my.cnf设置客户端与服务端字符集
1.停止MySQL;service mysqld stop
2.备份my.cnf文件:cp /etc/my.cnf /etc/my.cnf.bak
修改my.cnf
vi /etc/my.cnf
在[client]下添加,client为控制客户端
default-character-set=utf8
在[mysqld]下添加,mysqld为控制服务器端
default-character-set=utf8
3.重启MySQL
spark220:mysqladmin:/usr/local/mysql:>service mysqld restart
4.查看字符集是否已经修改
mysql>show variables like ‘%char%’;
注:修改配置文件,并重启服务器,才可以永久生效
五、检测字符集
mysql> SHOW CHARACTER SET;
mysql> SHOW COLLATION;
mysql> SHOW VARIABLES LIKE ‘character%’;
mysql> SHOW VARIABLES LIKE ‘collation%’;
mysql> SQL函数HEX、LENGTH、CHAR_LENGTH
mysql> SQL函数CHARSET、COLLATION
MySQL的字符集主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则。这两个参数集可以在数据库实例、单个数据库、表、列等四个级别指定。对于使用者来说,一般推荐使用utf8编码来存储数据。而要解决乱码问题,不单单是MySQL数据的存储问题,还和用户的程序文件的编码方式、用户程序和MySQL数据库的连接方式都有关系。
客户端的连接是没有作用的,客户端这时候一般需要指定utf8方式连接才能避免乱码。也就是传说总的set names命令。
set names utf8命令对应的是服务器端以下几个命令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
注:三个参数是不能写在配置文件my.cnf里的,只能通过set命令来动态修改,但在init_connect里设置,这个命令在每
个普通用户连接上来的时候都会触发执行,可以在[mysqld]部分增加以下一行设置连接字符集:
在[mysqld]下添加:
init_connect = ‘SET NAMES utf8’
总结:
1、编译安装MySQL的时候指定两个参数使用utf8编码。
2、配置文件my.cnf设定两个参数,同时设置init_connect参数。
3、配置文件my.cnf设定两个参数,同时客户端的连接指定set names命令。
4、配置文件my.cnf里的client和server处加入default-character-set参数方便管理。
若泽大数据交流群:671914634
原创文章,作者:筱凯,如若转载,请注明出处:https://www.jingyueyun.com/ask/245.html