解决Java连接MySQL数据库,中文显示乱码问题
2017-03-14 16:47
776 查看
背景:
由于最近在开发一个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:
[root@bogon ~]# /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进行字符编码,经过测试,我的程序能够正常的插入中文了。
希望能够帮助需要的朋友,如果还有问题可以给我留言~
由于最近在开发一个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:
[root@bogon ~]# /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进行字符编码,经过测试,我的程序能够正常的插入中文了。
希望能够帮助需要的朋友,如果还有问题可以给我留言~
相关文章推荐
- java jdbc连接Access数据库 出现中文乱码问题解决
- 解决SSH连接linux中文显示乱码问题
- 解决SSH连接linux中文显示乱码问题
- Xshell客户端连接Linux服务器中文显示乱码问题的解决办法
- Ubuntu/Debian下JAVA 中文/图片中文字体乱码显示问题解决方法
- JSP中乱码问题解决(一、JSP页面显示乱码,二、表单提交中文时出现乱码,三、数据库连接出现乱码,四、数据库的显示乱码 )
- Navicat连接mysql数据库中文显示乱码解决方法,但是phpmyadmin显示正常的。
- 解决ubuntu中java1.6显示中文乱码问题
- 解决navicate 连接mysql数据库中文乱码的问题
- Linux下写java程序时,显示/插入MySQL数据库乱码问题解决。
- MFC中ODBC连接MySQL数据库查询出的中文显示为乱码的问题
- java向mysql数据库中插入中文乱码问题解决
- java连接mysql数据库时有关中文乱码的问题
- Java_通过PreparedStatement往MySql数据库插入中文出现'?'乱码问题解决;
- 解决ubuntu中java1.6显示中文乱码问题
- Ubuntu/Debian下JAVA 中文/图片中文字体乱码显示问题解决方法
- Java 应用显示中文乱码问题的解决方法
- java使用 jdbc连接access数据库-中文显示乱码(已解决)
- ASP.net连接mysql数据库中文乱码问题的解决方法
- mysql导入导出数据中文乱码解决方法小结(1、navicat导入问题已解决,创建连接后修改连接属性,选择高级->将使用Mysql字符集复选框去掉,下拉框选择GBK->导入sql文件OK;2、phpmyadmin显示乱码的问题也解决,两步:1.将sql文件以utf8的字符集编码另存,2.将文件中sql语句中的字段字符集编码改成utf8,导入OK)