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的异常
<pre name="code" class="sql" style="color: rgb(69, 69, 69); line-height: 21px;">/**<span style="color: rgb(51, 51, 51); font-family: Arial; line-height: 26px;">修改字符集</span><span style="font-family: Arial;"> **/</span>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,设置编码,重启数据库,无效
<span style="font-size:18px;">[mysql] default-character-set=utf8 # ... ... 省略 [mysqld] character-set-server=utf8</span>
3. 重装本机数据库,无效
郁闷了半天,想起了对比法,将测试环境的数据库、表、字段信息与自己电脑中的进行对比,通过查看所有表中列的字符集发现Collation项,测试库所有varchar字段都是utf8_general_ci,而本地机器上的,都是空。修改字段字符集后,搞定!
另外我还做了测试,如果改一次以后,再将字段字符集改为gbk后,还是不会出现乱码,不知道是不是mysql5.5的bug。
<span style="font-size:18px;">--修改字段字符集 </span>
<span style="font-size:18px;">alter table tb_name modify column tb_column varchar(30) character set utf8 not null;</span>