Mysql的字符编码问题

wangjianme 10年前

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;

 

2Mysql的默认配置:

如果没有给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;