在web項目中,jsp的charest屬性需要和數據庫編碼對應,不然在特定情況會產生亂碼,也可能會產生鏈接數據庫錯誤,如:The database is not using Unicode. FishEye and Crucible require that the database uses a UTF8 encoding to support internalization.
也就是服務器頁面編碼(通過方法傳到服務器得到的頁面編碼)要和觀看頁面編碼(頁面自身的編碼)爲同一格式
數據存儲在數據庫中也應符合編碼格式,如何對數據庫編碼進行更改:
在此僅列舉三大常用數據庫的編碼更改方式:
1.Mysql
a.查看Mysql數據庫的默認編碼,有兩種方式
(1)使用status命令
mysql>status;
(2)使用show variables命令
b.對編碼字符集進行更改
(1)修改MySQL的配置文件/etc/mysql/my.cnf:
在[client]下追加:default-character-set=utf8
在[mysqld]下追加:character-set-server=utf8
在[mysql]下追加:default-character-set=utf8
(2)修改完畢後,使用如下命令之一重啓mysql服務:
service mysql restart
/etc/init.d/mysql restart
改變後,之前手工創建的數據庫如未顯式指定編碼,則其編碼仍是默認的latin1,可使用如下命令更改編碼:
mysql> alter database db_name CHARACTER SET utf8;
更改的關鍵即修改配置文件再運用命令更改編碼以確保字符集得到修改
2.Sqlsever
特殊情況說明:sqlserver是通過排序規則來處理的,默認是支持Unicode而SQL Server 7.0 和 SQL Server 2000年使用不同 Unicode 編碼 (UCS-2),並不能作爲有效的字符數據識別 utf-8,此種情況產生的錯誤可詳見微軟文檔:https://support.microsoft.com/zh-cn/help/232580/description-of-storing-utf-8-data-in-sql-server
修改步驟爲:
a.新建查詢語句 SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')
b.對照下列查詢結果:
936 簡體中文GBK
950 繁體中文BIG5
437 美國/加拿大英語
932 日文
949 韓文
866 俄文
65001 unicode UFT-8
由上表可知自己數據庫的編碼字符集
在此僅舉例如何修改爲簡體中文GBK
(1).將數據庫的字符集修改爲:
alter database dbname collate Chinese_PRC_CI_AS
(2).
--1. 爲數據庫指定排序規則
CREATE DATABASE db COLLATE Chinese_PRC_CI_AS
GO
ALTER DATABASE db COLLATE Chinese_PRC_BIN
GO
更多詳細修改方案可參考https://bbs.csdn.net/topics/330058393
3.Oracle
a.查看oracle編碼有兩步
(1)查詢oracle數據庫編碼:運用命令 select * from nls_database_parameters where parameter =’NLS_CHARACTERSET’;
(2)查詢oracle客戶端編碼:運用命令 select * from nls_instance_parameters where parameter=’NLS_LANGUAGE’;
b.修改oracle編碼
(1)以sysdba的身份登錄上conn/as sysdba
關閉 數據庫: shutdown immediate
以mount打來數據庫: startup mount
(2)設置session
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
(3)啓動數據庫
alter database open;
(4)修改字符集
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
(5)重新啓動
SQL>shutdown immediate;
SQL> startup