直接说干的 ,废话就不说了哈
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;