Mysql的字符编码问题
Mysql的字符编码问题
使用mysql总是经常被乱码所困扰,以下就简单说一下,mysql是如何管理字符编码的。
Mysql管理字符编码,使用三个不同的等级,分别为:
客户端(character_set_client) :即客户端,将以什么编码形式准备数据。
服务器(character_set_server):即服务器,将以什么编码形式保存数据。
连接器(character_set_connection):即客户端与服务器之间进行通信时,以什么编码方式进行通信。
Mysql对于每一个数据库,每一个表,每一个字段都可以单独设置字符编码格式。我个人认为。没有必须设置的那么细。只要编码格式可以精确到数据库,就足可以满足开发的需要。一般情况下,将数据库的编码格式设置成UTF8。
1、一些查看命令如下:
show variables; //显示客户端(当前)与服务器的所有变量设置信息。
(图略)
Show variables like ‘character%’; //只显示编码信息
此处可见,客户端、连接都是utf-8编码。
而数据库则为ISO-8859-1,
服务器也是ISO-8859-1。
为了保证不出现乱码,对于中文环境一般设置客户端环境为GBK,并与结果数据result设置的编码相同。数据库为UTF-8。
在命令行,设置编码格式:
Shell/> set character_set_client=utf8;
2、Mysql的默认配置:
如果没有给mysql配置字符集,mysql将选择默认配置。默认的配置从何而来呢?
(1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
(2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继
承自编译时指定的;
(3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置
文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
(4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为
character_set_server;
(5)当选定了一个数据库时,character_set_database被设定为这个数据库默认的字符集;
(6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个
数据库默认的字符集;
(7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;
简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,
不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把
default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用
UTF-8 存储。
3、一些有用的命令
/*显示所有系统变量的设置*/
SHOW VARIABLES;
/*显示所有以character开头的环境设置*/
SHOW VARIABLES LIKE 'character%';
/*功能同上*/
SHOW VARIABLES WHERE VARIABLE_Name LIKE 'character%';
/*显示当前数据库的编码格式*/
SHOW VARIABLES WHERE VARIABLE_NAME= 'character_set_database';
/*使用全局变量查询,功能同上*/
SELECT @@character_set_database;
/*设置自增量从1开始。默认就是从1开始*/
SET AUTO_INCREMENT_increment=1;
/*设置自增量每次增加2*/
SET AUTO_INCREMENT_offset=2;