最近在开发的过程中频繁的使用到了mysql'这款数据库,mysql的中文乱码问题一直让人头疼。以前遇到过几次,但是都一不小心就解决了,这次终于明白到底是怎么回事了。可能我下面说的这种解决方案只适合于我遇到的这种情况,同时这篇博客也只是对我个人问题的一个记载,可能对您没有帮助。
中文乱码的根本原因在于字符的编码和解码格式不对,只要能保证数据的编码和解码格式一致就能解决乱码的问题。首先要先保证程序当中的中文字符是没有乱码的。
个人习惯使用utf8编码格式。在安装mysql数据库的时候要添加utf8编码。
其次,要把mysql的配置文件my.ini的编码改掉。注意,这里必须要改成utf8,在mysql中没有utf-8这种格式。
重启mysql的服务才能生效。
创建数据库时候也要指定utf8编码格式。
也可以使用命令行的方式来设置编码 CREATE database testdb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
创建表的时候也要指定数据的编码格式。
create table `Course`
(
`id` int primary key,
`name` varchar(50)
)DEFAULT CHARSET=utf8;
create table `UserInfo`
(
`id` int primary key,
`password` varchar(50),
`userName` varchar(50) ,
`phone` varchar(50) ,
`email` varchar(50)
)DEFAULT CHARSET=utf8;
保证这么几个步骤,数据库的乱码问题就得到了解决。
附:mysql常用的查看编码的格式
一、查看MySQL数据库服务器和数据库MySQL字符集。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
mysql> show variables like '%char%' ; + --------------------------+-------------------------------------+------ | Variable_name | Value |...... + --------------------------+-------------------------------------+------ | character_set_client | utf8 |...... -- 客户端字符集 | character_set_connection | utf8 |...... | character_set_database | utf8 |...... -- 数据库字符集 | character_set_filesystem | binary |...... | character_set_results | utf8 |...... | character_set_server | utf8 |...... -- 服务器字符集 | character_set_system | utf8 |...... | character_sets_dir | D:MySQL Server 5.0sharecharsets |...... + --------------------------+-------------------------------------+------ |
二、查看MySQL数据表(table)的MySQL字符集。
1
2
3
4
5
6
|
mysql> show table status from databasename(这里写的是你的数据库的名字)
like '%countries%' ; + -----------+--------+---------+------------+------+-----------------+------ | Name | Engine | Version | Row_format | Rows | Collation |...... + -----------+--------+---------+------------+------+-----------------+------ | countries | InnoDB | 10 | Compact | 11 | utf8_general_ci |...... + -----------+--------+---------+------------+------+-----------------+------ |
三、查看MySQL数据列(column)的MySQL字符集。
1
2
3
4
5
6
7
8
9
10
|
mysql> show full columns from tablename(这里是你的数据表的名字); + ----------------------+-------------+-----------------+-------- | Field | Type | Collation | ....... + ----------------------+-------------+-----------------+-------- | countries_id | int (11) | NULL | ....... | countries_name | varchar (64) | utf8_general_ci | ....... | countries_iso_code_2 | char (2) | utf8_general_ci | ....... | countries_iso_code_3 | char (3) | utf8_general_ci | ....... | address_format_id | int (11) | NULL | ....... + ----------------------+-------------+-----------------+-------- |