資料庫儲存生僻字存在的問題
最近遇到兩個比較棘手的事情,都是同一種狀況:資料庫儲存不了帶有生僻字的客戶名。
一個是“?”,另外一個是“?”,只能是感嘆漢語真是博大精深啊。SR向原廠的工程師援助,
原廠都沒有辦法提供很好的解決方案。以下是遇到這種狀況的資料庫的字符集情況。當輸入帶有
這兩個生僻字的記錄時候,資料能錄入,但是當查詢記錄結果的時候,對應欄位的資訊就變成亂碼
“?”。經過非生僻字的儲存測試,以下涉及到的兩種字符集完全可以儲存漢字的資料記錄,但就是不能
儲存漢字中比較生僻的字。後面根據朋友做的一些測試說,在生僻字的前後價格空格可以插入到資料庫,並
能成功的顯示出來。我按照朋友介紹的方法在我的測試環境中再少補充了一些測試,結果還是隻能插入而不顯示。
原廠對朋友的這種測試,也還沒有作任何有效的回覆。
連改博文儲存發表之後,兩個生僻字都顯示為亂碼(估計部落格後臺資料庫也識別不了),我只能用以下圖片展示以下兩個生僻字了:
----兩個生僻字(拼音分別為“jie”二聲 和“mian”二聲):
----背景資料庫的字符集:
SQL>select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK
---資料庫主機的字符集:
AMERICAN_AMERICA.ZHS16GBK
----生僻文字輸入並儲存測試:
--生僻字1:?
--生僻字2:?
---測試表:suxing使用者下的表yourtest:
suxing@PROD>select * from yourtest;
ID NAME CREATED SEX
---------- ------ --------- -----
125 susu 02-NOV-16 man
123 yyyy 02-NOV-16 man
124 hhhh 10-NOV-16 man
126 wwww 10-NOV-16 man
125 dddd 11-NOV-16 woman
123 yyyy 24-NOV-16 man
127 haha 06-DEC-16 man
---測試庫的字符集:
scott@PROD>select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
---在CRT客戶端嘗試插入一條資料(name值為“??”):
suxing@PROD>insert into yourtest values(128,'??','','woman');
1 row created.
suxing@PROD>commit;
Commit complete.
#成功插入。
---在CRT客戶端查詢結果:
suxing@PROD>select * from yourtest where id=128;
ID NAME CREATED SEX
---------- ------ --------- -----
128 ?? Woman
#不顯示出中文,亂碼。
---在Windows環境的plsql developer客戶端檢視:
#結果顯示也是亂碼。
---在Windows cmd檢視:
SQL> select * from suxing.yourtest where id=128;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
128 ?? Woman
#結果顯示同樣是亂碼。
---嘗試在Windows cmd往測試表中插入一條新記錄:
SQL> insert into suxing.yourtest values(129,'??',sysdate,'woman');
已建立 1 行。
SQL> commit;
提交完成。
---在Windows cmd檢視新增的記錄:
SQL> select * from suxing.yourtest where id=129;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
129 ?? 06-3月 -17 woman
#從結果看,依然是亂碼。
---在Windows環境的plsql developer客戶端檢視新增記錄:
select * from suxing.yourtest where id=129;
#也還是亂碼。
---CRT客戶端連線服務端檢視新增記錄:
suxing@PROD>select * from yourtest where id=129;
ID NAME CREATED SEX
---------- ------ --------- -----
129 ?? 06-MAR-17 woman
#結果亂碼。
---在Windows cmd進行非生僻字嘗試插入一條記錄:
insert into suxing.yourtest values(130,'甦醒',sysdate,'man');
SQL> insert into suxing.yourtest values(130,'甦醒',sysdate,'man');
已建立 1 行。
SQL> commit;
提交完成。
---檢視新增記錄:
SQL> select * from suxing.yourtest where id=130;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
130 甦醒 06-3月 -17 man
---在plsql developer客戶端檢視新增記錄:
select * from suxing.yourtest where id=130;
---在CRT客戶端檢視:
suxing@PROD>select * from yourtest where id=130;
ID NAME CREATED SEX
---------- ------ --------- -----
130 ?? 06-MAR-17 man
#當ID為130時,CRT客戶端的查詢結果是亂碼。
---在plsql developer客戶端嘗試插入一條新記錄:
insert into suxing.yourtest values(131,'??',sysdate,'man');
commit;
---在plsql developer客戶端檢視輸出結果:
select * from suxing.yourtest where id=131;
#結果顯示是亂碼。
---在Windows cmd檢視最新增加的兩條記錄:
SQL> select * from suxing.yourtest where id=131;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
131 ?? 06-3月 -17 man
131 ?? 06-3月 -17 man
#最新兩條記錄的查詢結果也是亂碼。
---在Windows cmd再插入一條帶生僻字記錄:
SQL> insert into suxing.yourtest values(131,'??',sysdate,'man');
已建立 1 行。
SQL> commit ;
#成功插入一條記錄。
SQL> select * from suxing.yourtest where id=131;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
131 ?? 06-3月 -17 man
---在Windows cmd檢視帶生僻字“??”的新增記錄:
SQL> select * from suxing.yourtest where id=131;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
131 ?? 06-3月 -17 man
--------附加測試(在生僻字前後加上空格):
---設定主機系統字符集環境:
[oracle@enmo ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
--檢視錶的結構,欄位name的資料型別與長度:
PROD>desc suxing.yourtest
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(3)
NAME VARCHAR2(6)
CREATED DATE
SEX VARCHAR2(5)
---嘗試在生僻字前後加空格的字串:
SQL> insert into suxing.yourtest values(131,' ?? ',sysdate,'man');
已建立 1 行。
SQL> commit;
提交完成。
---檢視新插入的記錄:
SQL> select * from suxing.yourtest where id=131;
ID NAME CREATED SEX
---------- ------------ -------------- ----------
131 ?? 06-3月 -17 man
131 ?? 06-3月 -17 man
#查詢結果依然顯示亂碼。來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2134807/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於資料庫 Block 儲存細節問題的討論資料庫BloC
- 關於資料庫中儲存中文的問題,請高手指點資料庫
- 查詢當前資料庫存在某個字串的儲存過程資料庫字串儲存過程
- 【資料庫】解決Mysql資料庫提示innodb表不存在的問題!資料庫MySql
- 列式儲存資料庫資料庫
- 商用資料庫上雲的方式與存在的問題(上)資料庫
- 商用資料庫上雲的方式與存在的問題(下)資料庫
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- Sql Server判斷資料庫、表、儲存過程、函式是否存在SQLServer資料庫儲存過程函式
- 企業不可忽視的資料儲存和資料安全問題!
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- springMVC儲存資料到mysql資料庫中文亂碼問題解決方法SpringMVCMySql資料庫
- MySQL 資料庫儲存引擎MySql資料庫儲存引擎
- 資料庫儲存過程資料庫儲存過程
- ORACLE資料庫中如何插入生僻字Oracle資料庫
- MySQL資料庫的儲存引擎(轉)MySql資料庫儲存引擎
- 庫存批次存在非法字元,無法操作問題的解決.字元
- 儲存過程呼叫不同資料庫的資料儲存過程資料庫
- IOS資料儲存之Sqlite資料庫iOSSQLite資料庫
- IOS資料儲存之FMDB資料庫iOS資料庫
- 微信資料夾儲存在什麼位置?如何修改儲存路徑
- 分散式文件儲存資料庫之MongoDB訪問控制分散式資料庫MongoDB
- 報表資料分庫儲存
- MySql資料庫——儲存過程MySql資料庫儲存過程
- MySQL資料庫操作、儲存引擎MySql資料庫儲存引擎
- gitlab資料庫儲存位置Gitlab資料庫
- 使用Room持久庫儲存資料OOM
- 管理資料庫儲存結構資料庫
- 儲存與資料庫系統資料庫
- js中的儲存問題JS
- pgsql資料庫的表儲存策略原理SQL資料庫
- 使用資料庫儲存session的方法 (轉)資料庫Session
- Sqlserver資料庫儲存路徑的修改SQLServer資料庫
- 明解資料庫------資料庫儲存演變史資料庫
- 【資料庫】資料庫儲存元素型別基礎資料庫型別
- MySQL 更改資料庫資料儲存目錄MySql資料庫
- 【Android】資料儲存(三) 資料庫(SQLite)Android資料庫SQLite
- 重新學習Mysql資料庫3:Mysql儲存引擎與資料儲存原理MySql資料庫儲存引擎