java链接mysql 中文乱码
{转!}
背景:
由于最近在开发一个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 utf8;
创建数据库指定数据库的字符集
mysql>create database mydb character set utf8;
通过配置文件修改:
修改/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链接mysql 中文乱码的更多相关文章
- 通过msyql proxy链接mysql中文乱码及session问题
1.session问题 问题前提:一台机数据库为两个实例,通过不同的socket监听不同端口对外提供服务.不同的站点都访问同一个VIP不同的端口进行访问数据库. 故障现象:一旦有一个站点先用了这个vi ...
- Java连接MySQL中文乱码处理【转载】
本文转载地址:http://developer.51cto.com/art/200906/130425.htm 感谢相关作者! MySQL默认编码是latin1 mysql> show vari ...
- 解决java种mysql中文乱码问题
乱码问题原因有多种,其中有一种是由于MySQL默认使用 ISO-8859-1 ( 即Latin1 ) 字符集,而JAVA内部使用Unicode编码,因此在JAVA中向MYSQL数据库插入数据时,或者读 ...
- java insert mysql 中文乱码
jdbc:mysql://192.168.1.77:3306/db360?useUnicode=true&characterEncoding=UTF-8 drop database if ex ...
- 解决springmvc+mybatis+mysql中文乱码问题【转】
这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...
- sqoop导出到mysql中文乱码问题总结、utf8、gbk
sqoop导出到mysql中文乱码问题总结.utf8.gbk 今天使用sqoop1.4.5版本的(hadoop使用cdh5.4)因为乱码问题很是头痛半天.下面进行一一总结 命令: [root@sdzn ...
- 总结--解决 mysql 中文乱码
首先分析一下导致mysql 中文乱码的原因: 1.建表时使用了latin 编码 2.连接数据库的编码没有指定 3.写入时就已经乱码(这种情况需要自己检查源数据了) 解决方法总结: 1.创建库时指定编码 ...
- windows mysql 中文乱码和中文录入提示太大错误的解决方法
今天操作mysql的时候很郁闷,因为修改默认字符集搞了半天,终于弄成了(关于如何把windows的默认字符集设置成功,可以参看另一篇博文,最终在mysql中输入show variables like ...
- c#+mysql 中文乱码
c#+mysql 中文乱码 遇到一个奇怪的问题,C#读取mysql中文正常,写入时发生乱码 网上查阅原因,发现如下信息 ---------------------------------------- ...
随机推荐
- Sqlserver 2008 error 40出现连接错误的解决方法
说明(2017-5-25 15:00:16): 核心:把端口号改成1433 Sqlserver 2008 error 40出现连接错误的解决方法
- red hat enterprise linux 6
i386(32位):http://rhel.ieesee.net/uingei/rhel-server-6.3-i386-dvd.iso迅雷快传:http://kuai.xunlei.com/d/PF ...
- ios label 简单的长按复制文本信息
在iOS开发过程中,有时候会用到UILabel展示的内容,那么就设计到点击UILabel复制它上面展示的内容的功能,也就是Label长按复制功能.网上有很多种给Label添加长按复制功能的方法,这里我 ...
- docker探索-镜像使用(四)
前言 当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载. 1.查看本地主机上的镜像列表 [root@ ...
- 【Linux/CentOS】上手常见问题笔记
场景:Web项目服务端想要运行在Linux系统上,还要编写一些自动化发布代码的Shell脚本,需要学习使用Linux系统. 环境:Windows系统下用虚拟机VMware Workstation Pr ...
- C语言 · 3000米排名预测
算法提高 3000米排名预测 时间限制:1.0s 内存限制:256.0MB 问题描述 3000米长跑时,围观党们兴高采烈地预测着最后的排名.因为他们来自不同的班,对所有运动员不一定都 ...
- java你可能不知道的事(2)--堆和栈<转>
在java语言的学习和使用当中你可能已经了解或者知道堆和栈,但是你可能没有完全的理解它们.今天我们就一起来学习堆.栈的特点以及它们的区别.认识了这个之后,你可能对java有更深的理解. Java堆内存 ...
- FutureTask 源码分析
FutureTask 源码分析,这个类的原理与我分析android当中的FutureTask类差不多[http://www.cnblogs.com/daxin/p/3802392.html] publ ...
- Android——indexof()
Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下:1.int indexOf(String str) :返回第一次出现的指定子字符串在此字 ...
- CAS (13) —— CAS 使用Maven Profile支持多环境编译
CAS (13) -- CAS 使用Maven Profile支持多环境编译 摘要 CAS 使用Maven Profile支持多环境编译 版本 tomcat版本: tomcat-8.0.29 jdk版 ...