①这个问题是我偶然间发现的
org.apache.jasper.JasperException: /admins/userManagement.jsp(1,1)
Page directive: illegal to have multiple occurrences of
contentType with different values (old: text/html;charset=utf8, new: text/html;charset=gbk)
jsp的这个里面的 contentType 属性可能与相应的 html 的 contentType 有关联
<%@ page language="java" import="java.util.*" contentType="text/html;charset=utf8" pageEncoding="utf8"%>
html的如下
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>后台管理系统</title>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<link href="backSystem.css" rel="stylesheet" type="text/css" />
<script src="js/backSystem.js" type="text/javascript" ></script>
</head>...
两者必须相一致!!不能一个为 utf8,一个为 gbk,不然话就会报出上面那个错误~
②在安装mysql数据库的时候如果不小心选择了默认的 latin1,再去修改 my.ini 文件的时候
可能出现有些东西改不过来的情况
一般情况下,如果安装的时候选择 gbk的话,则将 myeclipse 项目,各个jsp页面,过滤器都设置成 gbk
这种情况下出现乱码的几率不会太大,这是经过我实践检验的
以前在使用gbk编码的mysql数据库时,基本上很少遇到现在这般的 乱码问题~~
如果将在安装mysql数据库的时候选择 utf8 的话,则后面有很多注意的地方,不然话将导致很多麻烦的问题
诸如中文插不进mysql数据库,或者中文插入mysql数据库再取出来的时候变成了乱码~
如果在安装时选择了 utf8,则在黑屏下执行“ SHOW VARIABLES LIKE 'character_set%'; ”
命令,一般会得到以下结果:
+--------------------------+---------------------------------------------------------+
| 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 | C:/Program Files/MySQL/MySQL Server 5.1/share/charsets/ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)
然而这个情况下,插入中文是插入不了的!!
mysql> show tables;
+------------------+
| Tables_in_estore |
+------------------+
| books |
| test |
| user |
+------------------+
3 rows in set (0.00 sec)
mysql> insert into test values(2,'养肠胃');
ERROR 1366 (HY000): Incorrect string value: '/xD1/xF8/xB3/xA6/xCE/xB8' for colum
n 'name' at row 1
怎么办呢??看下面的解决方案~
mysql> set names 'gbk';
Query OK, 0 rows affected (0.00 sec)
mysql> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> insert into test values(3,'朱昱');
Query OK, 1 row affected (0.00 sec)
继续往下走
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value
|
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk
|
| character_set_connection | gbk
|
| character_set_database | utf8
|
| character_set_filesystem | binary
|
| character_set_results | gbk
|
| character_set_server | utf8
|
| character_set_system | utf8
|
| character_sets_dir | C:/Program Files/MySQL/MySQL Server 5.1/share/charsets/ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)
可以看到这时候 character_set_client 、character_set_connection 、character_set_results
的值都变成 gbk 了,也就是说 set names 'gbk' 修改了这3个变量的值!!!
然后:
mysql> set character_set_results='utf8';
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+----+-----------+
| id | name |
+----+-----------+
| 1 | 鎵暱浼? |
| 3 | 鏈辨槺 |
+----+-----------+
2 rows in set (0.00 sec)
还原:
mysql> set character_set_results='gbk';
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+----+--------+
| id | name |
+----+--------+
| 1 | 扬长伟 |
| 3 | 朱昱 |
+----+--------+
2 rows in set (0.00 sec)
继续试验!!
mysql> set names 'latin1';
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+----+------+
| id | name |
+----+------+
| 1 | ??? |
| 3 | ?? |
+----+------+
2 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value
+--------------------------+---------------------------------------------------------+
| character_set_client | latin1
|
| character_set_connection | latin1
|
| character_set_database | utf8
|
| character_set_filesystem | binary
|
| character_set_results | latin1
|
| character_set_server | utf8
|
| character_set_system | utf8
|
| character_sets_dir | C:/Program Files/MySQL/MySQL Server 5.1/share/charsets/ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)
mysql> insert into test values (4,'打发');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+----+------+
| id | name |
+----+------+
| 1 | ??? |
| 3 | ?? |
| 4 | 打发 |
+----+------+
3 rows in set (0.01 sec)
③我曾经在这个项目上遇到过这样一个问题!!
整个 E-StorePro 项目采用的编码格式为 UTF-8 ,该项目里面的每个 JSP 页面涉及到编码格式的设置都为 UTF-8
该项目里面的每个 html 页面涉及到编码格式的也都设置为 UTF-8 !!
有一天我不死心(后台JSP页面采用 了嵌套JSp页面的模式,现在看来感觉真是乱糟糟的,当初还为此自鸣得意节省代码),
把某个JSP页面的编码格式改成了 gbk,结果就导致有时候进入到后台的时候报错,而有时候却正常地不得了~
一般情况下,设置为如下这样就差不多了~
| character_set_client | gbk
|
| character_set_connection | gbk
|
| character_set_database | utf8
|
| character_set_filesystem | binary
|
| character_set_results | gbk
|
| character_set_server | utf8
|
| character_set_system | utf8
整个项目的编码格式建议为utf-8,整个项目的所有jsp,html页面编码选项都设置成utf-8
过滤器filter貌似无所谓,我filter是像下面这么写得,感觉没什么用~
request.setCharacterEncoding("utf8");
response.setCharacterEncoding("utf8");
④数据库连接字符串带还是不带 “&useUnicode=true&characterEncoding=UTF-8” 呢?
如果采用3所述的设置的话,带上则会出现乱码,不带竟然也出现了乱码!!!蛋疼啊!!
回想到底是什么使我能够在mysql数据库中插入正常地中文??
对了,难道是因为添加书籍数据的那几个页面将所有与编码相关的变量都设置成了“gbk”???
我初步猜测应该是这样的,有待我进一步实验!!!!
经过我的反复测试,妈的果然不出我所料!!!!!!
经过进一步实验,发现无论是 set names 'gbk'、
set names 'utf8' 还是
set names 'latin1'
都能正常地插入和查询出中文,最最关键的其实不在于数据库
而在于 jsp、html 页面的编码是否为 GBK !!!这是最终的结论!!
分享到:
相关推荐
MySQL数据库系统中文乱码问题及解决方案.pdf
批量修改mysql数据库、表、字段编码(gbk到utf8php脚本) 可以把整个数据库、表、字段编码全部从gbk_chinese_ci 到 utf8_general_ci 转换,不会乱码哦 狂拽吊炸天!!!
解决MySQL数据库乱码问题,以及命令行查表乱码问题
Linux 下 设置mysql数据库为utf8编码的方法
在DELPHI中使用MyDAC连接MySQL数据库时中文显示乱码的解决方法。
utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 这篇文章给大家介绍了更改MySQL数据库的编码为utf8mb4的相关知识,感兴趣的朋友一起看看吧
解决mysql乱码问题。主要是数据库查询出数据中文为问号???的问题。
MySQL乱码解决方案数据库乱码MySQL乱码解决方案数据库乱码
MySQL设置UTF8中文乱码的解决方案.docx
mysql 创建数据库时指定编码很重要,很多开发者都使用了默认编码,乱码问题可是防不胜防,下面与大家分享下通过修改数据库默认编码方式为UTF8来减少数据库创建时的设置,避免因粗心造成的乱码问题
mysql插入数据库编码解决mysql插入数据库编码解决
修改/etc/my.cnf或者/etc/mysql/my.cnf文件 [client] default-character-set = utf8 [mysqld] default-storage-engine = INNODB ...创建新数据库时使用UTF-8编码 create database 'test' default character set u
创建数据表的时候:如果是该字段是存放中文的话,则需要将“整理”设置为:“utf8_general_ci”, 如果该字段是存放英文或数字的话,默认就可以了。 相应的SQL语句,例如: CREATE TABLE `test` ( `id` INT NOT ...
java插入mysql中文乱码解决
mysql数据库utf8转utf8mb4工具,将mysql数据库从utf8字符集转换为utf8mb4字符集,或将数据库从 utf8mb4字符集 转换为 utf8字符集。
163、一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。解决方法是在发送查询前执行一下下面这句:
乱码问题是很让人抓狂的问题,下面我将记录一下linux下mysql乱码问题的解决方法。 mysql在linux下乱码问题 一、操作 mysql默认字符集是latin1,但是我们大部分程序使用的字符集是utf8,我们就需要修改mysql的字符...
MySql中文乱码问题 Mysql建库建表 Mysql建库建表中文乱码问题 Mysql中文乱码问题解决方案
个人总结了遇到使用Mysql数据库插入中文时产生乱码问题的解决方法