{转!}
背景:
由于最近在开发一个APP的后台程序,需要Java连接远程的mysql数据库进行数据的更新和查询操作,并且插入的数据里有中文,在插入到数据库后发现中文都是乱码。网上查了很多教程,最后都没有解决,所以在这里记录下我解决的步骤,希望能够给以后遇到相同问题朋友一个参考,同时也起到记笔记的作用。
1.数据库插入中文乱码首先需要排除的问题是,MySQL的默认字符集和对应database的字符集是什么。
通常为了以后的兼容性,建议将整个MySQL的默认字符集都设置成utf-8。
可以使用以下命令查看默认字符集:
- mysql> SHOW VARIABLES LIKE ‘character%‘;
我的默认设置如下:
建议对于新装的MySQL直接将整个所有的默认字符集都设置成utf-8,对于已经有很多database的可以单独设置特定的数据库的字符集。
有关字符集的一些设置方法:
修改特定数据库的字符集
mysql>use mydb
mysql>alter database mydb character set utf-8;
创建数据库指定数据库的字符集
mysql>create database mydb character set utf-8;
通过配置文件修改:
修改/var/lib/mysql/mydb/db.opt
default-character-set=latin1
default-collation=latin1_swedish_ci
为
default-character-set=utf8
default-collation=utf8_general_ci
重起MySQL:
[[email protected] ~]# /etc/rc.d/init.d/mysql restart
通过MySQL命令行修改:
mysql> set character_set_client=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_connection=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_database=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_results=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_system=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_connection=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_database=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> set collation_server=utf8;
Query OK, 0 rows affected (0.01 sec)
2.这个相关的设置操作网上都有很多的教程。我也是按照教程都设置成了utf-8,如果通过以上的操作,你已经可以正常插入中文了,下面的就可以不用看啦~
但是我通过Java的JDBC插入数据库的中文依然是乱码。
最后经过各种尝试和查询发现是因为JDBC传输的时候默认不是用utf-8对sql语句编码。
所以我们还需要做的一项操作:
指定JDBC在传输的时候使用utf-8编码,这样整个程序处理、传输、数据库存储都统一了编码格式,因此中文就不会乱码了。
所以Java程序JDBC对应的数据库URL应该写成如下样式:
- // 驱动程序名
- private static String driver = "com.mysql.jdbc.Driver";
- // URL指向要访问的数据库名
- private static String url = "jdbc:mysql://localhost:3306/watermarking?useUnicode=true&characterEncoding=utf-8";
- // MySQL配置时的用户名
- private static String user = "root";
- // MySQL配置时的密码
- private static String password = "root";
URL中“?”后面的就是指定使用UTF-8进行字符编码,经过测试,我的程序能够正常的插入中文了。
希望能够帮助需要的朋友,如果还有问题可以给我留言~