[分享]Mysql的字符编码问题_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2546 | 回复: 0   主题: [分享]Mysql的字符编码问题        下一篇 
jun.zhang
注册用户
等级:上士
经验:278
发帖:76
精华:0
注册:2011-12-27
状态:离线
发送短消息息给jun.zhang 加好友    发送短消息息给jun.zhang 发消息
发表于: IP:您无权察看 2014-12-25 14:41:08 | [全部帖] [楼主帖] 楼主

     使用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;


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论