前提是想进行中文搜索,结果发送请求的uri中的中文不能正确识别。
照着网上教程
1.先将数据库以utf-8格式重新建立
2.修改struts,spring,hibernate中的字符集设置均为utf-8
sturs.xml中<struts>标签下加入:
<constant name="struts.i18n.encoding" value="UTF-8" />
hibernate.cfg.xml中<session-factory>标签下加入:
3.搜索中文时,uri中的中文就会造成如下错误
Illegal mix of collations (gb2312_chinese_ci,IMPLICIT) and (utf8_general_ci,....
在网上搜索后,原因是tomcat中未设置uri编码,导致碰到中文tomcat就使用了GB2312编码。
解决:在 Tomcat\conf\server.xml中 找到 :
照着网上教程
1.先将数据库以utf-8格式重新建立
drop database if exists game;
create database if not exists game
default charset utf8 collate utf8_unicode_ci;
use game;
CREATE TABLE `books`(
`book_id` int(11) NOT NULL default '0' ,
`book_name` varchar(200)
character set utf8 default NULL,
`book_author` varchar(100)
character set utf8 default NULL,
`book_publish` varchar(100)
character set utf8 default NULL,
`book_date` date default NULL,
`book_isbn` varchar(20) default NULL,
`book_page` int(11) default NULL,
`book_price` decimal(10,2) default NULL,
`book_content` varchar(100)
character set utf8 default NULL,
PRIMARY KEY (`book_id`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED
collate=utf8_general_ci ;
注意红字部分的字符集设置。
然后需要修改mysql的my.ini配置文件中的所有字符集设置为utf-8.
注意红字部分的字符集设置。
然后需要修改mysql的my.ini配置文件中的所有字符集设置为utf-8.
[client]
port=3306
default-character-set=utf8
[mysql]
default-character-set=utf8
character-set-server=utf8
最后为了验证效果,用cmd打开windows命令窗,进入mysql的bin文件夹路径下,
character-set-server=utf8
最后为了验证效果,用cmd打开windows命令窗,进入mysql的bin文件夹路径下,
*输入:mysql -u root -p,
*输入密码进入mysql。
*然后输入:use game;(我以上面的例子代码为例,用具体要看的数据库名代替game即可)
*然后输入:use game;(我以上面的例子代码为例,用具体要看的数据库名代替game即可)
*然后输入:show variables like 'char%';(输入char或者输入全名character都行)
就会出现如下显示,除了character_set_filesystem外,其他的都是utf-8就对了。
就会出现如下显示,除了character_set_filesystem外,其他的都是utf-8就对了。
2.修改struts,spring,hibernate中的字符集设置均为utf-8
sturs.xml中<struts>标签下加入:
<constant name="struts.i18n.encoding" value="UTF-8" />
hibernate.cfg.xml中<session-factory>标签下加入:
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>
web.xml中<web-app>标签下加入:
<filter-mapping>
web.xml中<web-app>标签下加入:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>com.commons.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter><filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.搜索中文时,uri中的中文就会造成如下错误
Illegal mix of collations (gb2312_chinese_ci,IMPLICIT) and (utf8_general_ci,....
在网上搜索后,原因是tomcat中未设置uri编码,导致碰到中文tomcat就使用了GB2312编码。
解决:在 Tomcat\conf\server.xml中 找到 :
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
改成:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
URIEncoding="UTF-8"/>
就可以了
20150408更新 如果是用Eclipse接管了tomcat,那么我们修改的配置文件就在Eclipse工程目录下Servers/Tomcat 7.0......-conf/server.xml,修改的地方是一样的。因为我们在publish server的时候,Eclipse会把我们使用的server的配置文件等全部覆盖tomcat默认目录下的配置,所以如果Eclipse接管了tomcat,就需要改Eclipse工程目录下我们使用的server的配置文件。