1. 程式人生 > >Java web專案Linux下部署的中文亂碼問題

Java web專案Linux下部署的中文亂碼問題

轉載:https://blog.csdn.net/qq_28039297/article/details/76686022

我們專案的開發是在windows下完成的。 
然後匯出.sql資料庫檔案,並匯出war包,準備部署到linux下的tomcat伺服器上。 
部署完成出現中文問題:

問題描述: 
1.資料庫中原有的資料都能正常顯示 
2.新新增資料時出現問題,中文顯示為問號:???

問題的解決過程: 
一、專案中預設編碼設定是UTF-8 
二、專案開發環境Eclipse的編碼方式是UTF-8(確保程式碼中的中文顯示正常) 
三、Tomcat配置: 
更改兩個檔案的配置 
1.server.xml

新增 URIEncoding="UTF-8" ,這個是為了解決get請求引數或者路徑帶中文的時候的編碼問題,在windows下如果不新增這個,get請求出現中文引數或者路徑一樣會出問題,如果是路徑,會404,如果是引數,會亂碼
  •  
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
  •  
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  URIEncoding="UTF-8"/>
  •  

2.web.xml

 <filter>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <async-supported>true</async-supported>
    </filter>

預設tomcat7中上面這段程式碼在註釋中,把它註釋去掉。 
重啟tomcat使配置生效。 
當然如果專案本身post請求的編碼集有設定,這步不需要也可以

四、mysql配置 
如果本身資料庫編碼集已經是UTF-8,這步可以省略,這步是針對編碼集沒有修改,使用預設的拉丁的編碼集 或者其他編碼集去弄的。

提示:如果MySQL資料庫的版本比較高的話(比如5.7版本),請參考:

https://www.cnblogs.com/ClassNotFoundException/p/6090357.html
1.修改mysql預設配置: 
預設的mysql配置:server、client都是latin1,對中文是不支援的,這裡改為utf8 
方法: 
修改配置檔案:

 

#vim /etc/mysql/my.cnf 
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

重啟mysql

/etc/init.d/mysql restart
  •  

檢查編碼方式: 

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |(*重點)
| character_set_connection | utf8                       |(*重點)
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |(*重點)
| character_set_server     | utf8                       |(*重點)
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
  • 2.修改專案使用的資料庫的配置 
    修改此資料庫的編碼方式為utf8(預設是latin1)
mysql> alter database 資料庫名 character set utf8;
  • 檢視此資料庫的編碼:
mysql> status
  •  
Connection id:        41
Current database:    tslcrms
Current user:        [email protected]
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        5.5.38-0ubuntu0.14.04.1 (Ubuntu)
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8        (*重點)
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:            53 min 14 sec
mysql> show create database tslcrms;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| tslcrms  | CREATE DATABASE `資料庫名` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+

3.匯入資料庫檔案中的表、欄位的編碼方式都修改成utf8 
可以直接改.sql檔案,改完匯入。 
也可以先匯入,再用命令檢視和更改。

附:在mysql中使用命令修改字符集:

mysql> SET character_set_client = utf8 ;
  •  
mysql> SET character_set_connection = utf8 ;
mysql> SET character_set_database = utf8 ;
mysql> SET character_set_results = utf8 ;
mysql> SET character_set_server = utf8 ;
mysql> SET collation_connection = utf8 ;
mysql> SET collation_database = utf8 ;
mysql> SET collation_server = utf8 ;
SET NAMES 'utf8';
相當於下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

 關於字符集編碼問題(get/post請求,tomcat有不同的處理)的解釋,請參考:

https://blog.csdn.net/u014201499/article/details/71553707