hibernate查詢客戶端服務端字符集不一致的oracle數據庫亂碼問題

問題描述:

oracle數據庫字符集是個讓人頭疼的問題,特別是一些客戶使用的是英文字符集數據庫,但客戶端顯示的字符集倒是中文的,因爲歷史的緣由,致使字符集不能改。因此只能由查詢、插入中文問題的服務程序更改了(我以爲這個處理很不優雅,但目前只想到這招)。java

解決:

1. 查詢數據庫的字符集
select * from nls_database_parameters;//查看數據庫字符集
複製代碼

數據庫字符集.jpeg

NLS_LANGUAGE:SIMPLIFIED CHINESE
NLS_CHARACTERSET:WE8ISO8859P1

能夠看出字符集不一致。致使web服務入參查詢、插入時會出現亂碼。web

2. 更改入參字符,使之和服務端字符一致並插入數據分析。

若是不肯定時,能夠寫個簡單的插入接口,以不一樣字符格式插入數據,相似下面:sql

switch (type){
			case 0:
				System.out.println("default 0:");
				vName = new String(name.getBytes());
				break;
			case 1:
				System.out.println("1-utf8:");
				try {
					vName = new String(name.getBytes("utf-8"));
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				break;
			case 2:
				System.out.println("2-gbk:");
				try {
					vName = new String(name.getBytes("gbk"));
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				break;
			case 3:
				System.out.println("3-iso-8859-1:");
				try {
					vName = new String(name.getBytes("iso-8859-1"));
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				break;
			case 4:
				System.out.println("4-gbk-to-iso8859:");
				try {
					vName = new String(name.getBytes("gbk"),"iso-8859-1");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				break;
			case 5:
				System.out.println("5-utf8-to-iso8859:");
				try {
					vName = new String(name.getBytes("utf-8"), "iso-8859-1");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				break;
			case 6:
				System.out.println("6-default-to-iso8859:");
				try {
					vName = new String(name.getBytes(), "iso-8859-1");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				break;
			case 7:
				System.out.println("7-iso8859-to-gbk:");
				try {
					vName = new String(name.getBytes("iso-8859-1"), "gbk");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
				break;
}
複製代碼
3.到數據庫查看結果

這樣可能在當前服務器查看參數還是亂碼,但切換到和服務器字符集的服務器登錄此數據庫,就能夠看到是正確的中文了。 英文字符集.jpeg數據庫

中文字符集.jpeg

咱們能夠發現type-6是以正常中文插入。也就是對應的服務器

new String(name.getBytes(), "iso-8859-1");
複製代碼
4.最終處理
String vName = new String(name.getBytes(), "iso-8859-1");
...//vName進行下一步查詢、插入
複製代碼
相關文章
相關標籤/搜索