jsp向mysql数据库插入中文字段 乱码以及中文空白的解决办法

来源:互联网 发布:末日数据化小说 女主 编辑:程序博客网 时间:2024/05/22 03:32

1.最近在学习java web,今天在做一个小demo,作用是通过浏览器向本地数据库插入记录,照着书写了jsp代码,插入数据也提示成功了,很兴奋,但是在命令行下select 数据表,发现凡是有中文的地方就出现‘???’这样的乱码,如下:


然后就在网上找解决方案,根据网友提供的一些方法,我将jsp页面中的编码方式统统改成‘utf-8’,如下

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ page contentType="text/html;charset=utf-8"%>
<%<span style="white-space:pre"></span>request.setCharacterEncoding("utf-8");%>
2.然后测试,将jsp页面上的表单提交过来的数据在网页上打印出来,显示正确,所以说源数据是正确的,这让我将问题定位到mysql上,再根据网友的回答,我找到mysql的配置文件,但是我的mysql安装目录下没有所说的my.ini,只有my-default.ini文件,于是依照网上所说的,在mysql安装根目录下复制my-default.ini,并粘贴,将名字改成my.ini,修改其内容如下:

# For advice on how to change settings please see# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the# *** default location during install, and will be replaced if you# *** upgrade to a newer version of MySQL.[mysqld]character-set-server=utf8# Remove leading # and set to the amount of RAM for the most important data# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.# innodb_buffer_pool_size = 128M# Remove leading # to turn on a very important data integrity option: logging# changes to the binary log between backups.# log_bin# These are commonly set, remove the # and set as required.  basedir = C:\Program Files\MySQL\MySQL Server 5.6  datadir = C:\Program Files\MySQL\MySQL Server 5.6\data# port = .....# server_id = .....character-set-server=utf8# Remove leading # to set options mainly useful for reporting servers.# The server defaults are faster for transactions and fast SELECTs.# Adjust sizes as needed, experiment to find the optimal values.# join_buffer_size = 128M# sort_buffer_size = 2M# read_rnd_buffer_size = 2M #sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
3.重新启动mysql服务:

net stop mysql

net start mysql

4.进入命令行,进入mysql:mysql -uroot(用户root,本人未设密码)

5.查看所有编码:

 show variables like 'character%';

这里的character_set_server=utf8;而在未添加my.ini文件前是下面这样的:


character_set_server=Latin1,这就是中文乱码的罪魁祸首。

6.解决了插入中文乱码的问题后,我尝试在命令行下insert一条中文记录,结果又出现中文空白问题:


于是又去网上查,这次很顺利,根据网上说的,先set names gbk;然后再插入中文记录就ok了。

其中set names gbk;会同时改变character_set_client,character_set_connection,character_set_results的编码值为gbk(出现空白是因为我之前将编码值全部设置成了utf8导致,上面的图是改正后的,所以有些图文不符,不过不影响说明解决编码问题的方法)

0 0
原创粉丝点击