前台一个汉字 占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;

posted on 2013-05-23 10:55  远方的人  阅读(8127)  评论(0编辑  收藏  举报

导航