前提是想進行中文搜索,結果發送請求的uri中的中文不能正確識別。
照着網上教程
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.
[client]
port=3306
default-character-set=utf8
[mysql]
default-character-set=utf8
character-set-server=utf8
最後爲了驗證效果,用cmd打開windows命令窗,進入mysql的bin文件夾路徑下,
*輸入:mysql -u root -p,
*輸入密碼進入mysql。
*然後輸入:use game;(我以上面的例子代碼爲例,用具體要看的數據庫名代替game即可)
*然後輸入:show variables like 'char%';(輸入char或者輸入全名character都行)
就會出現如下顯示,除了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>
<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"/>