mySQL中文乱码问题

时间:2014-07-22 22:59:36   收藏:0   阅读:504

  最近在完成老师要求的课程设计--游戏“你画我猜”的编写时,老师要求使用数据库存储猜词库,对于我们这些从未接触过数据库的人来说,这就是一个悲剧,于是我在将中文插入数据库时出现了各种问题(我的问题尤其多T^T)

          首先是在mySQL的安装时,配置各种出错mamicode.com,码迷,装了三遍好不容易装好了吧,输入中文要么乱码要么就根本不能存入mamicode.com,码迷,老师在帮我调节了好久后也劝我改用Access,但是艾玛为什么我的电脑上没有自带Access呢,于是在历经多次打击之下,我奋战一天一夜mamicode.com,码迷(中间其实是睡了觉的mamicode.com,码迷),终于让我成功的搞出了mySQL的中文乱码解决方法(其实是借鉴网上的啦)。现公布如下,希望跟我一样不幸的孩子们少走些弯路。

主要步骤如下,并非本人原创,感谢原作者分享,具体的情况可能根据个人实际情况来修改。

1、修改my.ini文件,

//原文件

[client]

port=3306

[mysql]

default-character-set=latin1

[mysqld]

port=3306

default-character-set=latin1

我把:default-character-set=gbk[两处,大小写都试过]

2、mysql> show variables like ‘character\_set\_%‘;

+--------------------------+--------+

| 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   |

+--------------------------+--------+

7 rows in set (0.00 sec)

mysql>

插入数据:

引用:

mysql> insert into event values("猪猪",‘2009-02-21‘,"发烧","打针就好了!");

ERROR 1366 (HY000): Incorrect string value: ‘\xD6\xED\xD6\xED‘ for column ‘name‘ at row 1

mysql> insert into event values("zhu",‘2009-02-21‘,"fashao","da zhen jiu hao le!");

Query OK, 1 row affected (0.06 sec)

插入中文失败,

插入英文可以.

查看看显示:

引用:

mysql> select * from pet

    -> ;

+----------+--------------+----------+------+------------+-------+

| name     | owner        | species  | sex  | birth      | death |

+----------+--------------+----------+------+------------+-------+

| 脰铆脰铆     | 脥玫脮帽露芦       | 脰铆       | n    | 2007-08-21 | NULL  |

| 鲁卢鲁卢     | 脥玫脮帽露芦       | 鹿路       | n    | 2007-06-12 | NULL  |

| 脫茫       | 脥玫脮帽露芦       | 脫茫       | t    | 2007-08-21 | NULL  |

| 掳垄脜拢     | 脩么脥镁         | 脜拢       | F    | 1999-03-30 | NULL  |

| Puffball | Diane        | hamster  | f    | 1999-03-30 | NULL  |

| bile     | Hane         | defaster | f    | 2004-09-30 | NULL  |

+----------+--------------+----------+------+------------+-------+

6 rows in set (0.00 sec)

另默认的那个字符集是8859-1,在这个状态下可以输入汉字.

很怪,可能很简单,新手就是不会......

 

再次作测试:

default-character-set=gb2312

 

ERROR 1366 (HY000): Incorrect string value: ‘\xB9\xD8\xD3\xF0‘ for column ‘name‘ at row 1

向表中插入中文字符时,出现错误。

mysql> select * from pet;

+--------+--------+---------+------+------------+------------+

| name   | owner  | species | sex  | birth      | death      |

+--------+--------+---------+------+------------+------------+

| ?í?í | ?????? | ?í     | ?    | 2007-08-21 | 0000-00-00 |

| ????   | ?????? | ??      | ?    | 2007-06-12 | 0000-00-00 |

| ??     | ?????? | ??      |    | 2007-08-21 | 0000-00-00 |

+--------+--------+---------+------+------------+------------+

3 rows in set (0.02 sec)

表中的中文字符位乱码。

解决办法:

使用命令:

mysql> status;(这个命令我不会用)

--------------

C:\Program Files\MySQL\MySQL Server 5.1\bin\mysql.exe  Ver 14.14 Distrib 5.1.36

 for Win32 (ia32)

 

Connection id:          1

Current database:       test1

Current user:           root@localhost

SSL:                    Not in use

Using delimiter:        ;

Server version:         5.1.36-community MySQL Community Server (GPL)

Protocol version:       10

Connection:             localhost via TCP/IP

Server characterset:    gb2312

Db     characterset:    latin1

Client characterset:    gb2312

Conn.  characterset:    gb2312

TCP port:               3306

Uptime:                 6 min 31 sec

 

Threads: 1  Questions: 15  Slow queries: 0  Opens: 20  Flush tables: 1  Open ta

les: 9  Queries per second avg: 0.38

--------------

查看mysql发现Db characterset的字符集设成了latin1,所以出现中文乱码。

更改表的字符集。

mysql> alter table pet character set gb2312;

------------------------------+

| pet   | CREATE TABLE `pet` (

  `name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,

  `owner` varchar(20) CHARACTER SET latin1 DEFAULT NULL,

  `species` varchar(20) CHARACTER SET latin1 DEFAULT NULL,

  `sex` char(1) CHARACTER SET latin1 DEFAULT NULL,

  `birth` date DEFAULT NULL,

  `death` date DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |

+-------+--------------------------------------------------------

查看表的结构:

mysql> show create table pet;

--------------------------------------+

| pet   | CREATE TABLE `pet` (

  `name` char(20) DEFAULT NULL,

  `owner` char(20) DEFAULT NULL,

  `species` char(20) DEFAULT NULL,

  `sex` char(1) CHARACTER SET latin1 DEFAULT NULL,

  `birth` date DEFAULT NULL,

  `death` date DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |

+-------+---------------------------------------------

mysql> desc pet;

+---------+----------+------+-----+---------+-------+

| Field   | Type     | Null | Key | Default | Extra |

+---------+----------+------+-----+---------+-------+

| name    | char(20) | YES  |     | NULL    |       |

| owner   | char(20) | YES  |     | NULL    |       |

| species | char(20) | YES  |     | NULL    |       |

| sex     | char(1)  | YES  |     | NULL    |       |

| birth   | date     | YES  |     | NULL    |       |

| death   | date     | YES  |     | NULL    |       |

+---------+----------+------+-----+---------+-------+

6 rows in set (0.00 sec)

这时向表中插入中文然后有错误。

mysql> INSERT INTO pet VALUES (‘猪八戒‘,‘唐僧‘,‘神仙‘,‘f‘,‘2001-12-01‘,NULL);

ERROR 1366 (HY000): Incorrect string value: ‘\xD6\xD0\xCE\xC4‘ for column ‘name‘ at row 1

还要更改pet表三个列的字符集。

因为表中已经有数据,所以更改字符集的操作失败,

清空pet表中的数据

mysql> truncate table users;

 

再更新三个字段的字符集:

mysql>alter table pet modify name char(20) character set gb2312;

mysql>alter table pet modify owner char(20) character set gb2312;

mysql>alter table pet modify species char(20) character set gb2312;

这时再插入中文字符,成功。

mysql> INSERT INTO pet VALUES (‘猪八戒‘,‘唐僧‘,‘神仙‘,‘f‘,‘2001-12-01‘,NULL);

Query OK, 1 row affected (0.05 sec)

 

mysql> select * from pet;

+--------+-------+---------+------+------------+-------+

| name   | owner | species | sex  | birth      | death |

+--------+-------+---------+------+------------+-------+

| 猪八戒 | 唐僧  | 神仙    | f    | 2001-12-01 | NULL  |

+--------+-------+---------+------+------------+-------+

1 row in set (0.00 sec)

  上面黄色部分是本人主要用到的,欢迎指正!

PS:修改字符集也可以用这种方法

MySQL写入中文乱码之处理character_set_server编码
 
        Java连接MySQL时,写入到数据库的中文,经常会编程乱码。我碰到了很多次,为了让自己彻底记住,于是,写下这个小计! 
        MySQL数据库出现中文乱码的原因,往往是以下以下客户端、服务器、结果集、数据库的字符集不统一造成的,可以通过:show variables like "%char%"; 语句查询自己数据库当前字符集的配置,显式结果如下: 
1
2
3
4
5
6
7
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

 

 
对于数据库字符集,可以通过这个命令更改:ALTER DATABASE `db_name` CHARACTER SET utf8;其他的也可以通过这条语句修改:set character_set_client=‘utf8‘; 
但是,character_set_server如果默认为latin1,要永久更改,用set命令是行不通的,而更改my.ini文件,也没有效果。 
 

         正解是:在MySQL的安装文件中进入bin目录下,双击MySQLInstanceConfig.exe,重新走一遍server的配置,但需要注意 的是,在Character Set环节,要选择第三项,character选择utf8,(第一项是默认server字符集为latin1)。

完成配置后,重启MySQL,写入的数据到MySQL中就是中文啦。为了解决中文乱码,你是不是还在不停的卸载重装MySQL呢?试试这个方法吧!

mySQL中文乱码问题,码迷,mamicode.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!