java jdbc 链接mysql插入数据中文显示乱码

1.读取数据正常,插入中文乱码查看链接处制定的字符集,这里使用utf-8

String url = "jdbc:mysql://127.0.0.1:3306/website?useUnicode=true&characterEncoding=utf-8 ";

完整代码如下:

public mysqlConnect() {
		String driver = "com.mysql.jdbc.Driver";
		// URL指向要访问的数据库名website
		String url = "jdbc:mysql://127.0.0.1:3306/website?useUnicode=true&characterEncoding=utf-8 ";
		// MySQL配置时的用户名
		String user = "root";
		// Java连接MySQL配置时的密码
		String password = "sanyue";
		try {
			// 加载驱动程序
			Class.forName(driver);
			conn = (Connection) DriverManager.getConnection(url,user, password);
			if (!conn.isClosed())
				System.out.println("Succeeded connecting to the Database!");
			// statement用来执行SQL语句
			statement = (Statement) conn.createStatement();

		} catch (Exception e) {
			e.printStackTrace();
			statement = null;
		}
	}

2.查看mysql和数据库本身默认是否采用的utf8编码

此处使用  set character_set_database="utf8";

修改后在重启mysql后会不起作用,所以请找到您的 mysql的配置文件  my.ini或my.cnf  在[mysqld]的中添加character_set_server=utf8,注意有些是default-character-set=utf8
,重新启动服务器时如果出错可以查看错误日志,最后会给出我在配置的过程中遇到的几个错误

mysql> show variables like "character%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

3.看页面本身是否是utf8编码。

4.看页面使用的编码是否是utf8编码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

基本上这几个步骤如果都正常就不会出错,但是存在一些情况。

例如,本次配置时我是利用的set character_set_database="utf8";在数据库中直接修改的字符编码,但是一直没有发现重启之后或者退出再次链接之后会回复为原来的latin1,所以一直以为数据库 本身编码没有问题。

另外,java 链接数据库的链接

String url = "jdbc:mysql://127.0.0.1:3306/website?useUnicode=true&characterEncoding=utf-8 ";

不要写错,中间的&实际为  &amp;  注意(此处由于编译器变为了&)

String url = "jdbc:mysql://127.0.0.1:3306/website?useUnicode=true&amp;characterEncoding=utf-8 ";

以下是遇到的一些错误:

mysql 错误日志

InnoDB: Unable to lock ./ibdata1, error: 11

InnoDB: Check that you do not already have another mysqld process

InnoDB: using the same InnoDB data or log files.

InnoDB: Unable to lock ./ibdata1, error: 11

InnoDB: Check that you do not already have another mysqld process

InnoDB: using the same InnoDB data or log files.

InnoDB: Unable to lock ./ibdata1, error: 11

InnoDB: Check that you do not already have another mysqld process

InnoDB: using the same InnoDB data or log files.

解决办法:

[email protected]:/var/lib/mysql# ps -ef | grep mysql

mysql    24477     1  0 16:35 ?        00:00:00 /usr/sbin/mysqld

root     24533  1908  0 16:35 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe

mysql    25382 24533  0 16:37 pts/0    00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock
--port=3306

root     25476  1908  0 16:37 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe

mysql    25839 25476  0 16:37 pts/0    00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock
--port=3306

root     26204 21859  0 16:38 pts/16   00:00:00 grep --color=auto mysql

[email protected]:/var/lib/mysql# kill -9 24477

[email protected]:/var/lib/mysql# kill -9 24533

....

错误日志

[email protected]:/var/lib/mysql# tail ../../log/mysql/error.log

150616 16:40:19 InnoDB: Using Linux native AIO

150616 16:40:19 InnoDB: Initializing buffer pool, size = 128.0M

150616 16:40:19 InnoDB: Completed initialization of buffer pool

150616 16:40:19 InnoDB: highest supported file format is Barracuda.

150616 16:40:20  InnoDB: Waiting for the background threads to start

150616 16:40:21 InnoDB: 5.5.43 started; log sequence number 6583039

150616 16:40:21 [ERROR] /usr/sbin/mysqld: unknown variable ‘default-character-set=utf8‘

150616 16:40:21 [ERROR] Aborting

解决方案:

打开mysql配置文件(这里在 /etc/mysql/my.cnf)

找到  [mysqld]中

用character_set_server=utf8来取代
default-character-set=utf8

时间: 2024-10-09 23:58:43

java jdbc 链接mysql插入数据中文显示乱码的相关文章

jdbc链接mysql插入数据后显示问号

1.在cmd中进入mysql查看默认的编码格式:mysql> show variables like "%char%"; 若不是utf8(因为我用的是utf8),关掉mysql服务,在my.ini中添加 [client]default-character-set=utf8 [mysqld]default-storage-engine=INNODBcharacter-set-server=utf8collation-server=utf8_general_ci [mysql]def

Linux下Tomcat向MySQL插入数据中文乱码解决办法

Linux下Tomcat向MySQL插入数据中文乱码解决办法 一.问题 在windows上面使用eclipse开发的项目在windows上面运行一切正常,部署到腾讯云时出现向MySQL数据库中插入数据是中文乱码 二.解决办法 1.尝试一直接在linux上面使用insert语句插入中文,正常2.尝试二在tomcat配置文件server.xml中加入useBodyEncodingForURI="true",不行3.尝试三在tomcat配置文件server.xml中再加入URIEncodin

20140509-MySQL导入脚本文件,插入数据时显示乱码的解决办法

20140509-MySQL导入脚本文件,插入数据时显示乱码的解决办法 打开CMD输入以下命令: mysql –u root –p 然后输入密码: 在导入脚本文件之前,对字符编码进行设置: charset gbk; 说明:上面的这条语句非常关键,这样不论你在cmd窗口,还是使用客户端输入中文,都能够正确保存了. 建议初学者不要使用SQLyog或者Navicat Premium等客户端连接工具.

C# mysql 插入数据,中文乱码的解决方法

用C#操作mysql时, 插入数据中文都是乱码,只显示问号,数据库本身使用的是utf-8字符 有两种解决办法: 一种是在执行语句前面设置,如: 1 MySQLCommand mCommand = new MySQLCommand("set names gb2312", m_Connection); 另一种是直接加在连接字符串里,如: 1 <add name="connection" connectionString="server=127.0.0.1

使用Java jdbc 链接mysql数据库过程

1.创建工程,下载mysql驱动包添加到classpath; 2.主要步骤: a.加载驱动 class.forName("com.mysql.jdbc.Driver"); b.使用该驱动连接到数据库,参数包括数据库路径,用户名,密码 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/3306/gaoxiangyu","root","root&quo

hibernate操作mysql插入修改中文出现乱码

第一步:mysql的安装目录下配置文件my.ini里面的所有default-character-set改成default-character-set = utf8: 第二部:建立数据库时候字符集选项选 第三步:后台代码连接数据库的链接地址后面跟useUnicode=true&characterEncoding=utf8 例: jdbc:mysql://localhost:3306/qqme?useUnicode=true&characterEncoding=utf8 注意编码格式统一为:u

GBK编码网站使用AJAX接收数据中文显示乱码问题解决

XMLHttpRequest 默认是用UTF-8 传递数据.当服务端和客户端以及数据库统一使用UTF-8编码可以有效的避免乱码问题.如果服务端设置了正确的Content-Type Response Header以及编码信息,那么XmlHttpRequest也可以正确工作.可是当使用XMLHttpRequest读取中文网页内容时, 如果服务端的程序没有设置Content-Type Response Header,或者Header没有设置编码类型,那么我们访问responseText属性的时候就可能

load data infile 导入数据 中文显示乱码 解决方法

各种字符参数统一为utf8 SET character_set_client = utf8 ; SET character_set_connection = utf8 ; SET character_set_database = utf8 ; SET character_set_results = utf8 ; SET character_set_server = utf8 ; SET collation_connection = utf8 ; SET collation_database =

linux下mysql中文显示乱码,读取又正常

今天发现linux中在shell中查看mysql数据库,中文显示乱码,但是取到网页中又是正常的. 解决方法1: 在第一次进入mysql时,加一句 set names utf8 //设置编码 解决方法2: 修改/etc/my.cnf文件: 在[client]下添加 default-character-set=utf8 在[mysqld]下添加 default-character-set=utf8 最后 /etc/init.d/mysql restart   重启即可