{转!}

背景:

由于最近在开发一个APP的后台程序,需要Java连接远程的MySQL数据库进行数据的更新和查询操作,并且插入的数据里有中文,在插入到数据库后发现中文都是乱码。网上查了很多教程,最后都没有解决,所以在这里记录下我解决的步骤,希望能够给以后遇到相同问题朋友一个参考,同时也起到记笔记的作用。

 

1.数据库插入中文乱码首先需要排除的问题是,MySQL的默认字符集和对应database的字符集是什么。

通常为了以后的兼容性,建议将整个MySQL的默认字符集都设置成utf-8。

可以使用以下命令查看默认字符集:

  1. 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应该写成如下样式:

  1. // 驱动程序名
  2. private static String driver = "com.mysql.jdbc.Driver";
  3. // URL指向要访问的数据库名
  4. private static String url = "jdbc:mysql://localhost:3306/watermarking?useUnicode=true&characterEncoding=utf-8";
  5. // MySQL配置时的用户名
  6. private static String user = "root";
  7. // MySQL配置时的密码
  8. private static String password = "root";

URL中“?”后面的就是指定使用UTF-8进行字符编码,经过测试,我的程序能够正常的插入中文了。

希望能够帮助需要的朋友,如果还有问题可以给我留言~

java链接mysql 中文乱码的更多相关文章

  1. 通过msyql proxy链接mysql中文乱码及session问题

    1.session问题 问题前提:一台机数据库为两个实例,通过不同的socket监听不同端口对外提供服务.不同的站点都访问同一个VIP不同的端口进行访问数据库. 故障现象:一旦有一个站点先用了这个vi ...

  2. Java连接MySQL中文乱码处理【转载】

    本文转载地址:http://developer.51cto.com/art/200906/130425.htm 感谢相关作者! MySQL默认编码是latin1 mysql> show vari ...

  3. 解决java种mysql中文乱码问题

    乱码问题原因有多种,其中有一种是由于MySQL默认使用 ISO-8859-1 ( 即Latin1 ) 字符集,而JAVA内部使用Unicode编码,因此在JAVA中向MYSQL数据库插入数据时,或者读 ...

  4. java insert mysql 中文乱码

    jdbc:mysql://192.168.1.77:3306/db360?useUnicode=true&characterEncoding=UTF-8 drop database if ex ...

  5. 解决springmvc+mybatis+mysql中文乱码问题【转】

    这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...

  6. sqoop导出到mysql中文乱码问题总结、utf8、gbk

    sqoop导出到mysql中文乱码问题总结.utf8.gbk 今天使用sqoop1.4.5版本的(hadoop使用cdh5.4)因为乱码问题很是头痛半天.下面进行一一总结 命令: [root@sdzn ...

  7. 总结--解决 mysql 中文乱码

    首先分析一下导致mysql 中文乱码的原因: 1.建表时使用了latin 编码 2.连接数据库的编码没有指定 3.写入时就已经乱码(这种情况需要自己检查源数据了) 解决方法总结: 1.创建库时指定编码 ...

  8. windows mysql 中文乱码和中文录入提示太大错误的解决方法

    今天操作mysql的时候很郁闷,因为修改默认字符集搞了半天,终于弄成了(关于如何把windows的默认字符集设置成功,可以参看另一篇博文,最终在mysql中输入show variables like ...

  9. c#+mysql 中文乱码

    c#+mysql 中文乱码 遇到一个奇怪的问题,C#读取mysql中文正常,写入时发生乱码 网上查阅原因,发现如下信息 ---------------------------------------- ...

随机推荐

  1. 【Tensorflow】设置显存自适应,显存比例

    用惯了theano.再用tensoflow发现一运行显存就满载了,吓得我吃了一个苹果. 用天朝搜索引擎毛都搜不到,于是FQ找了下问题的解决方法,原来有两种 按比例 config = tf.Config ...

  2. 【机器学习】主成分分析PCA(Principal components analysis)

    1. 问题 真实的训练数据总是存在各种各样的问题: 1. 比如拿到一个汽车的样本,里面既有以“千米/每小时”度量的最大速度特征,也有“英里/小时”的最大速度特征,显然这两个特征有一个多余. 2. 拿到 ...

  3. EXCEL行倒叙

  4. java中定义enum示例

    /** * Enumeration for the message delivery mode. Can be persistent or * non persistent. Use the meth ...

  5. JAVA-JSP内置对象之exception对象用来处理错误异常

    相关资料:<21天学通Java Web开发> exception对象1.exception对象用来处理错误异常.2.如果要使用exception对象,必须指定page中的isErrorPa ...

  6. ios CGRectGet...位置属性的基本介绍

    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 10, 110, 150)]; label.backgroundColor ...

  7. [转]MySQL-5.7 Update语句详解

    原文地址:https://www.cnblogs.com/tongxiaoda/p/7908977.html .语法 (1)单表 UPDATE [LOW_PRIORITY] [IGNORE] tabl ...

  8. spark wordcont Spark: sortBy和sortByKey函数详解

    //统计单词top10def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("tst&q ...

  9. Java并发编程 LockSupport源码分析

    这个类比较简单,是一个静态类,不需要实例化直接使用,底层是通过java未开源的Unsafe直接调用底层操作系统来完成对线程的阻塞. package java.util.concurrent.locks ...

  10. SQL SERVER 事务和锁

    内容皆整理自网络 一.事务 作者:郭无心链接:https://www.zhihu.com/question/31346392/answer/59815366来源:知乎著作权归作者所有.商业转载请联系作 ...