数据库中的一些特殊字符

10820阅读 0评论2014-01-22 eagle198699
分类:Oracle

Oracle中存储特殊字符,需要该字符在字符集中有编码才可以正确存储,例如:

SQL> select ascii('☆') from dual;
                                 
 ASCII('☆')                     
-----------                      
      41454                      
                                 
SQL> select ascii('㊣') from dual;
                                 
 ASCII('㊣')                     
-----------                      
      43337                              
     

有一些特殊字符,如R圈,C圈符号,在ZHS16GBK中没有,但是在AL32UTF8字符集中,有C圈和R圈的符号,例如:

SQL> insert into tab1 select 1,UNISTR('\00A9') from dual;
                                                        
1 row inserted                                          
                                                        
SQL> select * from tab1;                                
                                                        
        ID NAME                                         
---------- --------------------                         
         1  ©     <- 此处应该为C圈符号
        

SQL> insert into tab1 select 1,UNISTR('\00AE') from dual;
                                                        
1 row inserted                      

SQL> select * from tab1;                                
                                                        
        ID NAME                                         
---------- --------------------                         
         1 ?      <- 此处应该为R圈符号 
         
        
查看ASCII编码或unicode编码的符号内容:
select rownum+40000,chr(rownum+40000) from dual connect by level<=10000;
select rownum,UNISTR('\00'||lpad(trim(to_char(rownum,'xx')),2,'0')) from dual connect by level<=255;


在ZHS16GBK下,通过UNISTR('\00ae')虽然也可以查出R圈,但是insert到表中就成了问号,在AL32UTF8字符集下是可以insert到表中并正确存储的。

SQL> insert into tab1 select 1,UNISTR('\00ae') from dual;
 
1 row inserted
 
SQL> select * from tab1;
 
        ID NAME
---------- --------------------------------------------------
         1 ?


select 1,chr(49838) from dual;

在AL32UTF8字符集下该assci是R圈。

         1 CHR(49838)
---------- ----------
         1 ?       <- 此处应该为R圈符号 

在ZHS16GBK字符集下是中文"庐"

         1 CHR(49838)
---------- ----------
         1 庐

上一篇:使用SQL Profile固定执行计划
下一篇:禁用hald-addon-stor