mysql 乱码问题终结

来源:互联网 发布:淘宝浦发信用卡额度 编辑:程序博客网 时间:2024/05/19 23:15

直接说干的 ,废话就不说了哈

 

1.将C:/Program Files/MySQL/MySQL Server 5.1/my.ini文件,改成这样:

主要是改里边的latin1改为gbk
[mysqld]
default-character-set=gbk

[mysql.server]
default-character-set=GBK


[mysql.server]
user=mysql
basedir="C:/Program Files/MySQL/MySQL Server 5.1/"
default-character-set=gbk

注意:就是加入了一句default-character-set=gbk,后面的[mysql.server]是要手动加进去的。

 

修改后重新启动mysql

 

 

查看系统的字符集用下面的命令:

1 mysql> SHOW VARIABLES LIKE 'character_set_%';

2 +--------------------------+-----------------------------------------+

3 | Variable_name | Value |

4 +--------------------------+-----------------------------------------+

5 | character_set_client | gbk |

6 | character_set_connection | gbk |

7 | character_set_database | gbk |

8 | character_set_filesystem | binary |

9 | character_set_results | gbk |

10 | character_set_server | gbk |

11 | character_set_system | utf8 |

12 | character_sets_dir | E:/usr/MySQL Server 5.0/share/charsets/ |

13 +--------------------------+-----------------------------------------+

14 8 rows in set (0.00 sec)

15

可以看到,我的这几个变量都是一致的。但如果不一致呢?网上许多教程告诉你“你set names下就解决了”。

那么set names是什么呢? set names实际上就是同时设置了 character_set_client ,character_set_connection和 character_set_results 这三个系统变量。

例如在mysql命令行上输入 set names 'gbk' 命令等同于:

SET character_set_client = gbk;

SET character_set_connection = gbk;

SET character_set_results = gbk;

SET character_set_server =gbk;

 


mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | gbk|
| collation_database   | gbk|
| collation_server     | gbk |
+----------------------+-------------------+
3 rows in set (0.02 sec)

如果不是 用set names修改成一致的。

 

 

二、乱码解决方案
要解决乱码问题,首先必须弄清楚数据库用什么编码。如果没有指明,将是默认的latin1。
用得最多的应该是这3种字符集 gb2312,gbk,utf8。

如何去指定数据库的字符集呢?下面也gbk为例

【在MySQL Command Line Client创建数据库 】

mysql> CREATE TABLE `mysqlcode` (
-> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
-> `content` VARCHAR( 255 ) NOT NULL
-> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> desc mysqlcode;
+---------+-----------------------+------+-----+---------+----------------+
| Field | Type                | Null | Key | Default | Extra       |
+---------+-----------------------+------+-----+---------+----------------+
| id    | tinyint(255) unsigned | NO | PRI |       | auto_increment |
| content | varchar(255)       | NO |     |       |             |
+---------+-----------------------+------+-----+---------+----------------+
2 rows in set (0.02 sec)

其中后面的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
就是指定数据库的字符集,COLLATE (校勘),让mysql同时支持多种编码的数据库。

当然也可以通过如下指令修改数据库的字符集
alter database da_name default character set 'charset'

修改表

alter table 'tb_name default character set gbk COLLATE gbk_bin;

修改字段的编码:

alter table 'tb_name change 'tb_id' 'tb_id' varchar(20) character set gbk COLLATE gbk_bin NOT NULL;

显示表字段属性:

SHOW CREATE TABLE TB_NAME;