前台一個漢字 占varchar2 多少問題


可以通過  sql  語句 ,查看 一個漢字 占幾個varchar2  

  select length(t.unit_name),lengthb(t.unit_name) from T_TJ_VIP_USER_INFO t where t.user_id='2321'

  length   和 lengthb 函數 

select userenv('language') from dual;  查看字符集 (目前有問題)

 

 結果顯示,本機Oracle的字符集是UTF-8,32位,而不是GBK的16位。UTF-8的每個字符占3個字節(bytes),可以通過修改默認字符集來實現varchar2(2)存儲一個漢字。

方法如下:

      

SHUTDOWN IMMEDIATE;  
STARTUP MOUNT; 
ALTER SYSTEM ENABLE RESTRICTED SESSION; 
 ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 
ALTER DATABASE OPEN; 
ALTER DATABASE CHARACTER SET AL32UTF8/ZHS16GBK;
SHUTDOWN IMMEDIATE;

STARTUP;
ORACLE nvarchar2和varchar2的區別
 
   1、NVARCHAR2中存儲中文字時,一個中文字當一個字符來處理
      NVARCHAR2(10)是可以存進去10個漢字的,如果用來存英文也只能存10個字符。
   2、而VARCHAR2中一個中文字當兩個字符來處理
      VARCHAR2(10)的話,則只能存進5個漢字,英文則可以存10個

     Oracle中nvarchar2和varchar2的共同點:
     不定長存儲,當存儲信息長度小於指定的長度,那么就已實際存入的長度為准這一點不像varchar這種定長存儲那樣浪費空間,比如varchar 指定是10個字符,那么存入5個字符的時候,他會自動填充空格來補齊以達到指定的長度
 
 
 
 
 
查看修改 oracle  字符串
[q]怎么樣查看數據庫字符集 
[a]數據庫服務器字符集select * from nls_database_parameters,其來源於props$,是表示數據庫的字符集。 
客戶端字符集環境select * from nls_instance_parameters,其來源於v$parameter, 
表示客戶端的字符集的設置,可能是參數文件,環境變量或者是注冊表 
會話字符集環境 select * from nls_session_parameters,其來源於v$nls_parameters,表示會話自己的設置,可能是會話的環境變量或者是alter session完成,如果會話沒有特殊的設置,將與nls_instance_parameters一致。 
客戶端的字符集要求與服務器一致,才能正確顯示數據庫的非ascii字符。如果多個設置存在的時候,alter session>環境變量>注冊表>參數文件 
字符集要求一致,但是語言設置卻可以不同,語言設置建議用英文。如字符集是zhs16gbk,則nls_lang可以是american_america.zhs16gbk。 

[q]怎么樣修改字符集 
[a]8i以上版本可以通過alter database來修改字符集,但也只限於子集到超集,不建議修改props$表,將可能導致嚴重錯誤。 
startup nomount; 
alter database mount exclusive; 
alter system enable restricted session; 
alter system set job_queue_process=0; 
alter database open; 
alter database character set zhs16gbk;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM