jdbc连接mysql 时的中文乱码问题解决

在用 jdbc 向 mysql 数据库插入中文时出现了乱码,严格来说是通过 Hibernate。记录下搜索和查文档以后找到的解决办法。

  • 首先要告诉数据库要插入的字符串使用的字符集,mysql 默认使用的字符集是 latin1。我要保存的字符串是 UTF-8 编码的(字符集是 Unicode),所以包含这个字段的表应该使用 UTF-8 编码。这里有几种解决办法。

    1. 在建立数据库的时候指定数据库的字符集编码,这样,这个数据库的所有表都会默认使用数据库的字符集编码。如 create database foo charset utf8;
    2. 在建表的时候指定字符集编码。如 create table foo (id char(20)) charset utf8;
    3. 指定某一列使用的字符集编码。如create table foo (id char(20) charset utf8);

    如果你有需要的话还可以指定字符排序的规则,也就是指定 collation,如 create database foo charset utf8 collate utf8_general_ci;,同样也可以指定单独的表、列使用的 collation 规则。

  • 然后在使用 jdbc 连接数据库的时候要告知 jdbc 使用什么字符集编码来跟服务器通信。很简单,只需要在 jdbc 指定数据库路径时做一点修改就可以了。比如,jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf8。注意如果在 XML 文件里面的话 “&” 要改成 “&”。

如果你使用的是 gbk 编码的话把上面所有提到 utf8 的地方改成 gbk 应该就可以了,只要服务器和客户端使用的字符集编码统一就可以了。

mysql 命令行客户端默认使用的字符集也是 latin1,如果你通过这个来插入中文的话也会出现乱码的情况。解决的办法是执行语句 set names ‘utf8‘ 来告诉服务器使用 UTF-8 编码来和客户端通信。你也可以使用 set charset ‘utf8‘,它和 set names 区别只在于 collation 上。set names 和 set charset 都相当于执行了三条语句,具体的内容可以去看 mysql 文档 10.4 节。我想这个方法在使用 jdbc 的时候也是可以的,所以如果 jdbc 的指定数据库地址中没有告知使用的字符集编码的话可以通过执行上面的语句来达到相同的效果。

先说一下我的环境,windows XP,mysql5.0安装版,rails1.2.3。

试过的解决方法有3种:

1。重新利用 MySQL Server instance Config Wizard向导,重新Reconfigure Instance。改编码为utf8

2。修改MySQL文件夹下的my.ini文件。如下:

[mysql]

default-character-set=utf8

[mysqld]
default-character-set=utf8

3。SET character_set_client =utf8;
      SET character_set_results = utf8;
      SET character_set_connection = utf8;

可输入mysql>SHOW VARIABLES LIKE ‘%character%‘ ;命令查看效果。

以上方式前2种其实是一个原理,看你习惯怎么改罢了,而设置的值正是上图中的character_set_database和character_set_server.

这些都是网上一搜一大片的处理方式,在这里也做一个总结。但我通过以上方式去做了以后,非但乱码问题没有解决,而且数据库表中再无法插入中文。

时间: 2024-08-18 13:11:44

jdbc连接mysql 时的中文乱码问题解决的相关文章

解决JDBC连接MySQL时发出的警告WARN: Establishing SSL connection without server's identity verification ...

对于稍微有点强迫症的我来说,每次正常加载MySQL驱动后,eclipse的控制台总是出现一行红色警告: Fri Mar 30 14:55:35 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection m

R连接Mysql时,中文显示为问号的解决方案

1.打开Mysql安装目录下的my.ini文件,将其中的default-character-set= 均设置为GBK 2.在管理工具——数据源(ODBC)中将创建好的数据源作如下设置: R连接Mysql时,中文显示为问号的解决方案

jdbc连接mysql时发出警告:WARN: Establishing SSL connection without server's identity verification is not recommended...

警告信息如图: 解决: 在jdbcurl后面加上这个&useSSL=false参数: jdbc连接mysql时发出警告:WARN: Establishing SSL connection without server's identity verification is not recommended... 原文地址:https://www.cnblogs.com/xiamaojjie/p/12216086.html

mybatis连接mysql数据库插入中文乱码

对于mysql数据库的乱码问题,有两中情况: 1. mysql数据库编码问题(建库时设定). 2. 连接mysql数据库的url编码设置问题. 对于第一个问题,目前个人发现只能通过重新建库解决,建库的时候,选择UTF-8字符集.我试过修改现有数据库字符集为UFT -8,但是根本不起作用,插入的中文仍然乱码(中文显示成:???).重建库时选择字符集为UTF-8之后,中文正常显示了. 对于第二个问题,是这样 的情况:我建库时设置了数据库默认字符集为UTF-8,通过mysql workbench直接插

JDBC 连接 MySQL 时碰到的小坑

最近从MS SQL Server换到了MySQL,已经是8.11版本了,安装的时候似乎还用了新的身份认证方式之类的,连接过程中也是磕磕绊绊,碰到很多奇奇怪怪的问题,在此记录下来. 驱动加载: 以前使用JDBC时,都是导入相应的JDBC驱动jar包,然后使用 Class.forName(driverName); 加载驱动,再进行数据库连接,在使用MySQL 8.11版本及其对应的Connector时,如果使用上述代码加载com.mysql.jdbc.Driver的话,控制台会输出一行信息: Loa

jsp页面写入中文到mysql时出现了乱码(转)

今天自己在用jsp把中文写入mysql的时候出现乱码,从数据库中读取出来的时候也显示为“??”,感觉应该出现了编码转换过程中的字符信息丢失.然后在mysql中直接执行该命令,发现中文是正常的,所有认为是在往数据库中写中文的时候出现了问题. 在网上找了一会,发现不少解决方法,就转了一篇 过来,这个刚好能解决自己的问题.     在此表示感谢. 今天遇到了在jsp页面写入中文到mysql时出现了乱码,已经漫长的过程,问题终于解决了.         先说下自己的开发环境:jsp+Eclipse+my

MySQL客户端输出窗口显示中文乱码问题解决办法

转载:http://www.cnblogs.com/xdp-gacl/p/4008095.html 只为成功找方法,不为失败找借口! MySQL客户端输出窗口显示中文乱码问题解决办法 最近发现,在MySQL的dos客户端输出窗口中查询表中的数据时,表中的中文数据都显示成乱码,如下图所示: 上网查了一下原因:之所以会显示乱码,就是因为MySQL客户端输出窗口显示中文时使用的字符编码不对造成的,可以使用如下的命令查看输出窗口使用的字符编码 1 show variables like 'char%';

MySql插不进中文,以及IDEA连接MySql出现小段乱码问题

最近我遇到了一个 bug,我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一个 UTF-8 字符串,然后出现了一个离奇的错误: Incorrect string value: ‘\xF0\x9F\x98\x83 <…’ for column ‘summary’ at row 1 我用的是 UTF-8 编码的客户端,服务器也是 UTF-8 编码的,数据库也是,就连要保存的这个字符串“ <…”也是合法的 UTF-8. 问题的症结在于,MySQL 的“utf8”实际上不是真正的

在使用xutils时post请求传递中文到服务端Mysql数据库出现中文乱码。

            在使用xutils时post请求传递中文到服务端Mysql数据库出现中文乱码. 这个问题困惑了我很久,也走了很多弯路.经过不断的探究终于找到了问题的解决方案. 第一:查看自己的mysql的编码.cmd->mysql –uroot –p -->输入自己的mysql的密码->输入 SHOWVARIABLES LIKE 'character%';(如果装mysql时默认安装的话,会出现很多latin1,而不是我下面的全部utf-8,这是因为mysql默认的编码是lati