JDBC解决中文乱码
在使用JDBC开发的过程中,通常会遇到中文保存到数据库乱码的问题。
这个问题的产生有3个方面:
- 数据库,包括数据库编码、表编码、字段编码等
- 在Java Web 程序中,请求对象(Request)未进行编码处理
- JDBC连接数据的URL未加字符编码参数
下面们从3个方向演示一些解决方法。
MySQL数据库编码
在创建数据库时,在创建表时,在创建字段时,留意下编码是不是UTF-8。
如下面的创建数据库脚本将字符编码设置为UTF-8
CREATE DATABASE `northwind` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;
下面的建表脚本将表字符编码和字段字符编码设置为UTF-8
CREATE TABLE `bigtb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) COLLATE utf8_bin DEFAULT NULL,
`file` mediumtext COLLATE utf8_bin DEFAULT NULL,
`images` longblob DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
在使用MySQL Workbench工具创建数据库、表、字段时可以下拉选择字符编码,非常方便。
请求对象编码
在Java Web 程序中,可以拦截请求对象(Request),设置UTF-8编码。
只在写一个过滤器Filter,所有请求编码都生效。
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam; /**
* Servlet Filter implementation class CharsetEncodingFilter
*/
@WebFilter(urlPatterns = {"/*"}, initParams = {
@WebInitParam(name = "encoding", value = "UTF-8")})
public class CharsetEncodingFilter implements Filter { private FilterConfig config; public CharsetEncodingFilter() {
} @Override
public void destroy() {
// TODO Auto-generated method stub
} @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(config.getInitParameter("encoding"));
chain.doFilter(request, response);
} @Override
public void init(FilterConfig fConfig) throws ServletException {
this.config = fConfig; } }
JDBC URL参数编码
只要在连接URL字符里添加参数 ?useUnicode=true&characterEncoding=utf-8
完整的URL字符串如下:
String url = "jdbc:mysql://127.0.0.1:3306/northwind?useUnicode=true&characterEncoding=utf-8";
原文地址https://www.wangshenghua.com/wiki/jdbc/c92e93d44a3408745d92108773b4b4db/
已经获得作者许可,欢迎转载!
JDBC解决中文乱码的更多相关文章
- Javaweb 使用Servlet技术改写用户登录 使用Filter技术解决中文乱码
先把实验3的jsp页面复制过来: WebContent->WEB-INF->lib下面的jar包8.0版本也要记得复制: Java Resources->src下的 cn.edu.h ...
- 增加UBUNTU字符集 解决中文乱码问题
对GBK,GB2312,GB18030字符集的支持是UBUNTU中文乱码的罪魁祸首,其实我们可以在保持UTF-8为默认编码的条件下添加对这几个编码的支持,以解决中文乱码问题. 我想这个问题肯定有其他人 ...
- Sublime Text 2—解决中文乱码
Sublime Text 2是一个非常棒的代码及文本编辑器,绿色小巧.速度飞快,跨平台支持Win/Mac/Linux,支持32与64位,支持各种流行编程语言的语法高亮.代码补全等,有着许多其他编辑器没 ...
- zabbix解决中文乱码问题(没有测试成功)
zabbix解决中文乱码问题 1.在windows系统中找一个自己喜欢的字体,这里我们用:msyh.ttf 2.将字体上传至/var/www/html/zabbix/fonts目录下 [root@za ...
- 【原创】通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...
这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错 ...
- Debian 6解决中文乱码
DEBIAN下中文显示 一.首先检查LOCALE情况 说明:DEBIAN因为基于GNU所以,对不同地域进行了不同的包支持,以LOCALE形式存在. 1.挂载ISO文件包,前8个ISO包就可以(这里不在 ...
- 04_过滤器Filter_02_Filter解决中文乱码问题
[过滤器解决中文乱码问题实例] [工程截图] [web.xml] <?xml version="1.0" encoding="UTF-8"?> &l ...
- Web---演示servlet技术(servlet生命周期),解决中文乱码问题
本节讲解决中文乱码问题的4种方法. 还有更好的方法,也就是用过滤器,这里就不演示了,博主目前也不会~呼♪(^∇^*)~过段时间才会学. servlet生命周期演示: index.jsp: <%@ ...
- 通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...
原文:[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 'incorrect string value: '\xF0... 这篇blog重点在解决问题,如果你对 ...
随机推荐
- Java微信公众平台开发(十五)--微信JSSDK的使用
转自:http://www.cuiyongzhi.com/post/63.html 在前面的文章中有介绍到我们在微信web开发过程中常常用到的 [微信JSSDK中Config配置] ,但是我们在真正的 ...
- Java微信公众平台开发(十一)--开发中微信公众平台/开放平台/商户平台的关联
转自:http://www.cuiyongzhi.com/post/55.html 微信公众平台(map.weixin.qq.com)/开放平台(open.weixin.qq.com)/商户平台(pa ...
- nat123软件windows版
转自:http://www.nat123.com/pages_8_565.jsp 同时支持内网和公网IP.只要可以上网,即可将所有应用发布外网. >>nat123客户端windows版本软 ...
- c++builder Form重载WindowProc、WndProc 截获消息
c++builder 重载WindowProc.WndProc 截获消息 方法一WindowProc void __fastcall myWindowProc(Messages::TMessage ...
- fatal error C1083: 无法打开包括文件:“qedit.h”: No such file or directory
VS2010编译 DirectShow一些项目时遇到 错误:fatal error C1083: 无法打开包括文件:“qedit.h”: No such file or directory 解决方法: ...
- copyWithZone详解
[copyWithZone详解] NSObject实现了-copy.+copy.+copyWithZone方法.代码如下: + (id)copy { return (id)self; } + (id) ...
- Apache与Tomcat联系及区别
Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行.Apache是Web服务器而Tomcat是Java应用服务器. A ...
- Express的路由详解
Express的路由详解 http://www.jb51.net/article/76203.htm
- Chrome,firefox,ie等浏览器空格 宽度不一样
方案一:使用其他字符代替空格 使用( :)空格浏览器之间,显示的不一样,对不齐等现象. 解决方案: 用半角空格&ensp:或者全角空格&emsp:就可以了,&e ...
- Base -快捷键|通配符|特殊符号|输出(正确与错误的保存)
curl + a 移动光标到行首. curl +e 移动光标到行尾. curl +k 剪切光标所在位置到行末的字符. curl+u 剪切光标所在位置到行首的字符. curl +y ...