传智播客学习之Mysql乱码问题

本文分享了解决JSP页面数据插入MySQL数据库时出现乱码的方法,包括修改客户端字符集、通过页面设置字符编码、调整数据库配置及使用过滤器等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

到目前为止,已经学习了接近13个小时了,不知是因为晚上屋内暖气上升的缘故,还是做了太久,站起来的那一刻,突然感觉一阵眩晕,今天第一次感觉学习原来真的还是一件比较累人的事情,在这点闲暇时间,和大家分享我今天的一些学习心得吧,今天主要是用struts+JSP+Mysql做了一个小小的项目,下面就和大家分享一下如何解决JSP页面数据插入数据库乱码的问题。

今天在做项目的时候,好不容易把代码写完,当程序发布后,从客户端页面查询数据库内容发现怎么都有错,仔细分析,发现sql语句中中文根本无法出来,后来第一反应,就用了过滤器,问题解决了,但是我本人总是不太喜欢过滤器这个东西,加之只有几个字段,觉得应该还有更好一些的办法,于是开始在网上进行了大量的搜索行动,功夫不负有心人,终于让我有了一点小小收获。

数据库中关于字符集的种类有很多,对编程有影响的主要是客户端字符集和数据库字符集,而数据库中常用的操作主要是保存数据和读取数据,我们只要保证写入时选择的字符集和读取时选择的字符集一致,即只需保证两次操作的客户端字符集一致即可。方法主要有以下几个方面。

一、修改客户段的字符集,这里主要有两种方式,一种是通过页面,其次可以通过字符串的getBytes方法设定,这里我就不再重复,因为在之前有一篇有关中文乱码的博客已经写得比较详尽了,感兴趣的朋友可以去哪里参看。

1.通过页面

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

2.通过编码

public void reset(ActionMapping mapping, HttpServletRequest request){

try {

   request.setCharacterEncoding("utf-8");

  } catch (UnsupportedEncodingException e) {

     e.printStackTrace();

  }

二、修改数据库(mydql)的字符编码

1.通过在获取数据库连接的时候,通过url参数来设定,如下:

jdbc:mysql://localhost:3306/db_name"?useUnicode=true&characterEncoding=utf-8

2.通过启动配置文件

打开MySQL的启动配置文件,(windows环境的叫my.ini文件,在安装目录)

然后打开配置文件,在[mysql]段加入一下代码 default-character-set=utf-8

然后打开配置文件,在[client]段加入一下代码 default-character-set=utf-8

设置后重新启动MySQL服务。

再打开 WinMysqlAdmin管理器,选择Variables项,查看一下变量的值是否如下

  character_set_server  =utf-8

  character_set_system  =utf-8

  character_set_database  =utf-8

  character_set_client  = utf-8

  character_set_connection  = utf-8

  character_set_results = utf-8

  collation_connection = utf-8_general_ci

  collation_database = utf-8_general_ci

  collation_server =utf-8_general_ci

3.创建表的时候制定字符编码set names utf-8

4.修改表和字段的字符集
4.1 修改数据库  mysql> alter database name character set utf8;
4.2 修改表 alter table 表名 convert to character set gbk;
4.3 修改字段
alter table 表名 modify column '字段名' varchar(30) character set gbk not null; 5.使用过滤器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值