Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1149020
  • 博文数量: 231
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 16:35
个人简介

学无止境

文章分类

全部博文(231)

文章存档

2014年(7)

2013年(103)

2011年(11)

2010年(53)

2009年(57)

分类: Oracle

2014-01-22 09:10:33

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 庐

阅读(10758) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~