Mysql中文乱码解决思路和过程(三)

2014-11-24 10:32:57 · 作者: · 浏览: 1
IoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:722)
说数据过长,此时查看数据表默认编码方式如下所示:
mysql> show create table t_user;
+--------+----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------------+
| Table  | Create Table


                                        |
+--------+----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------------+
| t_user | CREATE TABLE `t_user` (
  `userId` int(10) NOT NULL auto_increment,
  `userName` varchar(100) NOT NULL,
  `age` int(2) default NULL,
  `birthday` datetime default NULL,
  `isVip` tinyint(1) default NULL,
  PRIMARY KEY  (`userId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+--------+----------------------------------------------------------------------
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----------------------------------------+
1 row in set (0.00 sec)
会发现数据表默认编码是latin1,所以异常的原因就是中文的编码和表的默认编码不匹配,造成数据冲突引起的。
步骤三:解决异常执行以下两句进行更改数据库的默认编码方式; 方案一:drop表,然后重新建表,建表语句如下所示;
create table t_user(
	userId	    int(10)	 not null primary key auto_increment,
	userName    varchar(100) not null,
	age	        int(2),
	birthday    datetime,
	isVip       boolean
) DEFAULT CHARSET=gbk;
方案二:mysql自带的命令执行以下两句命令:
--修改表默认用gbk
alter table t_user character set gbk;
--修改userName字段编码为gbk
alter table t_user modify userName varchar(100) CHARACTER SET gbk; 
执行完之后,数据库字段和表的编码方式都更改为了gbk,此时在进行插入数据时候,数据表中的数据为:
mysql> select * from t_user;
+--------+----------+------+---------------------+-------+
| userId | userName | age  | birthday            | isVip |
+--------+----------+------+---------------------+-------+
|      1 |          |    0 | 2014-01-01 00:00:00 |     1 |
|      2 | 元旦快乐 |    0 | 2014-01-01 00:00:00 |     1 |
+--------+----------+------+---------------------+-------+
2 rows in set (0.00 sec)
第一条为乱码时候插入的数据,第二条为解决后插入的数据,此时My sql数据库编码已经解决了。

总结:对于数据库乱码解决方案,可以归纳如下: 通过软件或者配置文件进行第一步修改编码通过 mysql命令更改数据库编码(如果默认编码支持中文,此步骤就可以省略了)发生Data too long for column……异常,进行数据表字符编码更改 一般情况的mysql数据库中文编码问题即可得到解决,编码同样可以设置成utf8编码方式,但有时会出现数据库中编码是繁体字的现象,然后执行set names "gbk"命令,即可成功显示简体中文。
下面提供常用的修改中文字符乱码的mysql命令:
set names 'gbk'; 
--它相当于下面的三句指令: 
set character_set_client = gbk; 
set character_set_results = gbk; 
set character_set_connection = gbk; 

--显示数据表表的编码
 show create table t_user(表的名称);
 
 --修改数据库编码为gbk
 alter database steven(数据库的名称) character set gbk; 
 
--修改表默认用gbk
alter table t_user(表的名称) character set gbk;

--修改userName字段编码为utf8
alter table t_user(表的名称) modify userName(表中字段的名称) varchar(100) CHARACTER SET gbk; 

--创建表
create table t_user(
	userId	    int(10)	 not null primary key auto_increment,
	userName    varchar(100) not null,
	age	        int(2),
	birthday    datetime,
	isVip       boolean
) DEFAULT CHARSET=gbk;