JAVA写入MySQL数据提示[ERROR 1366 (HY000):错误异常解决方案

JAVA写入MySQL数据提示[ERROR 1366 (HY000):错误异常解决方案


今天搭建一套开发环境测试时,写入MySQL数据库的中文数据就出现异常,MySQL是5.5,java版本是1.6,调试几次写入数据库的都是乱码。

先查看了字符集:

/**查看字符集 **/
--查看MySQL数据库服务器和数据库字符集 
show variables like '%char%';
--查看表的字符集 
show table status from mysql_db like '%tb_name%'
--查看表中所有列的字符集 
show full columns from tb_name;
--查看mysql所支持的字符集 
show charset;



1. 改数据库的编码,无效,最后还导致1366的异常

/**修改字符集 **/
set character_set_connection=utf8;set character_set_database=utf8;set character_set_results=utf8;set character_set_server=utf8;set character_set_system=utf8;set collation_connection=utf8;set collation_database=utf8;set collation_server=utf8; --修改表的字符集 

 
  
ALTER TABLE tb_name CONVERT TO CHARACTER SET utf8;

2. 修改MySQL启动文件my.ini,设置编码,重启数据库,无效

[mysql]
default-character-set=utf8
# ... ... 省略
[mysqld]
character-set-server=utf8


3. 重装本机数据库,无效


郁闷了半天,想起了对比法,将测试环境的数据库、表、字段信息与自己电脑中的进行对比,通过查看所有表中列的字符集发现Collation项,测试库所有varchar字段都是utf8_general_ci,而本地机器上的,都是空。修改字段字符集后,搞定!

另外我还做了测试,如果改一次以后,再将字段字符集改为gbk后,还是不会出现乱码,不知道是不是mysql5.5的bug。

--修改字段字符集 
alter table tb_name modify column tb_column varchar(30) character set utf8 not null;





你可能感兴趣的:(MySQL)