Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1233153
  • 博文数量: 135
  • 博客积分: 10576
  • 博客等级: 上将
  • 技术积分: 1670
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-11 20:49
个人简介

不疯魔,不成活! --疯魔老杨(Crazy.LaoYang) http://www.inotes.cn/

文章分类

全部博文(135)

文章存档

2014年(4)

2012年(13)

2011年(5)

2010年(30)

2009年(56)

2008年(27)

分类: Mysql/postgreSQL

2009-05-05 06:09:41

我的总结对您有帮助吗?请留言给我!谢谢!!!  
   在学习MYSQL的过程中,字符集的问题可能是一个很让人“郁闷”的事,现在将我在此方面的学习所得与大家分享一下,希望对你有所帮助!
 
1)MySQL字符集
   Mysql的字符集设置分为:Server characterset/Db characterset和Client characterset/Conn. characterset。也就是Mysql服务器本身的字符编码和客户端联机用的字符编码。如:
mysql> status;
--------------
mysql  Ver 14.12 Distrib 5.0.45, for redhat-linux-gnu (i686) using readline 5.0
Connection id:          20378404
Current database:
Current user:          root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.45 Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1

UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 119 days 10 hours 19 min 1 sec
说明:以上所查说明Server Db 和Client Conn所用的字符编码全部是Latin1。
 
//改变Server Db的字符编码
编辑mysql的配置文件:/etc/my.cnf或my.ini
在[mysql]段中加入:
#改成utf8
default-character-set=utf8
#改成gb2312
default-character-set=gb2312
 
//改变Client conn.的字符编码
编辑mysql的配置文件:/etc/my.cnf或my.ini
在[client]段中加入:
#改成utf8
default-character-set=utf8
#改成gb2312
default-character-set=gb2312
 
重启动Mysql,再通过mysql>status;进行查询时,可以发现Server DB以及Client conn.的字符设置已经按你所设置的字符编码启动了。
 
//客户连接字符编码
(通过实例进行说明)
mysql> status;
--------------
mysql  Ver 14.12 Distrib 5.0.45, for redhat-linux-gnu (i686) using readline 5.0
Connection id:          20380340
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.45 Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1

UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 119 days 10 hours 35 min 49 sec
Threads: 2  Questions: 384136644  Slow queries: 0  Opens: 2953019  Flush tables: 1  Open tables: 64  Queries per second avg: 37.223
--------------
mysql> select * from cework.english;
+--------------+-------------+----------------------------------------------------------+
| word         | chinese     | note                                                     |
+--------------+-------------+----------------------------------------------------------+
| relationship | ?????       | relationship database                                    |
| enterprise   | ??          | enterprise edition / standard edition / personal edition |
| migration    | ??          | migraine(???)                                            |
| integrate    | ???????     | integrated circuit(????)                                 |
| restrict     | ?????       | he feels this new law will restrict his freedom.         |
| query        | ????????    | question                                                 |
| structure    | ?????       | SQL?Structured Query Language                            |
| distinct     | ??????????? | select distinct job from scott.emp;                      |
| disaster     | ??,????     | dis-???aster??????????????????????????                 |
| dedicated    | ????        | dedicated                                                |
+--------------+-------------+----------------------------------------------------------+
10 rows in set (0.00 sec)
可以发现所查结果中的中文字符显示为乱码,因为Client Conn.所用字符编码为Latin1。
 
下面在连接服务器时,指定连接字符编码为:gb2312
[root@cactiez ~]# mysql --default-character-set=gb2312
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20380975
Server version: 5.0.45 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> status;
--------------
mysql  Ver 14.12 Distrib 5.0.45, for redhat-linux-gnu (i686) using readline 5.0
Connection id:          20380975
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.45 Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    gb2312
Conn.  characterset:    gb2312

UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 119 days 10 hours 41 min 33 sec
Threads: 2  Questions: 384148644  Slow queries: 0  Opens: 2953107  Flush tables: 1  Open tables: 64  Queries per second avg: 37.223
--------------
mysql> select * from cework.english;
+--------------+------------------------+-------------------------------------------------------------------------+
| word         | chinese                | note                                                                    |
+--------------+------------------------+-------------------------------------------------------------------------+
| relationship | 关系,联系             | relationship database                                                   |
| enterprise   | 企业                   | enterprise edition / standard edition / personal edition                |
| migration    | 迁移                   | migraine(偏头痛)                                                        |
| integrate    | 使结合成为整体         | integrated circuit(集成电路)                                            |
| restrict     | 限制,约束             | he feels this new law will restrict his freedom.                        |
| query        | 疑问,怀疑,查询       | question                                                                |
| structure    | 结构,构造             | SQL:Structured Query Language                                          |
| distinct     | 截然不同的,完全分开的 | select distinct job from scott.emp;                                     |
| disaster     | 灾难,彻底失败          | dis-离开+aster星,原是注定命运的星宿已离开,人就要遭不幸即“灾难”来临 |
| dedicated    | 专注的,               | dedicated                                                               |
+--------------+------------------------+-------------------------------------------------------------------------+
10 rows in set (0.00 sec)
现在表中的中文显示就正常了!
 
//php连接mysql,字符查询设置
(与Mysql的Client conn.基本一样,那么也通过一个实例也看一下,要如何处理?)
PHP文件:




读取mysql的测试




单词记忆表




 
   
   
   
 
  /*1. 建立MYSQL连接*/
 $conn =  mysql_connect('192.168.10.1:3306','php','php');
 /*2. 选择一个数据库*/
 mysql_select_db("cework",$conn);
 /*3. 进行查询SQL操作*/
 $sql = "select * from english";
 $result = mysql_query($sql,$conn);
 /*4. 开始遍历读取全部数据信息,返回的是一个数组信息。然后可以分别取数组中元素*/
 while($row =  mysql_fetch_array($result))
 {
?>
 

   

   

   

 

 }
 /*5. 释放掉查询结果集*/
 mysql_free_result($result);
 /*6. 关闭数据库连接*/
 mysql_close($conn);
 ?>
 
页面的显示为乱码,如下图:
 
更改PHP查询,设置编码方式,如:
 /*1. 建立MYSQL连接*/
 $conn =  mysql_connect('192.168.10.1:3306','php','php');
 /*Add设置查询编码方式*/
 mysql_query("SET NAMES 'gb2312'");
 /*2. 选择一个数据库*/
 mysql_select_db("cework",$conn);
 /*3. 进行查询SQL操作*/
 $sql = "select * from english";
 $result = mysql_query($sql,$conn);
 /*4. 开始遍历读取全部数据信息,返回的是一个数组信息。然后可以分别取数组中元素*/
 while($row =  mysql_fetch_array($result))
 {
?>
 
再看页面显示已经可以正常显示中文了,如图:
 
//与字符编码相关的查询
show [full] columns from tbl_name [FROM db_name] [LIKE 'pattern']
可显示表中字段的Collation
 
SHOW CREATE DATABASE db_name
可显示数据库的字符集
 
SHOW CREATE TABLE tbl_name
可显示表的字符集

SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
可显示表的Collation

show variables like "char%";
可显示字符变量

show variables like "col%";
可显示字符变量
 
//创建和修改数据库以及表的字符集
创建默认字符集为UTF8的数据库和表
 Create database db_name default charset utf8;
 Create table tb_name(
     //table-data;
 )engine InnoDB default charset utf8;

修改字符集
 alter database db_name default charset utf8;
 alter table tb_name convert to charset utf8;
 
我的总结对您有帮助吗?请留言给我!谢谢!!!
阅读(1926) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
单词中文注释