说明:Oracle表中的数据的全角与半角问题,现在处理起来已经不那么麻烦了,这里主要说明一下小细节,以便日后提醒自己,处理所用到的两个函数:
to_single_byte(tablename) ---转成半角
to_multi_byte(tablename) -----转成全角
例如下面一张表:
create table books(
bid varchar2(15), --ID
bname varchar2(50) not null , --书名
bauthor varchar2(15) not null,--作者
bname_pym varchar2(50) ,
bauthor_pym varchar2(15),
bpublic varchar2(50)
) ;
假如里面的书名被录入了很多全角字段,需要转换成半角方便以后查询,你会考虑到
update books set bname_pym = to_single_byte(bname) ;
这里暂不考虑性能问题,全表更新;但是你会发现执行完全角并没有被更新,当时第一次碰到也蛮奇怪,下面写法就没有问题
declare
name varchar2(100) ;
begin .
....................
nmae:=to_single_byte(bname) ;
.....................
update books set bname_pym = nmae;
.....................
这段代码是伪代码,但这样写就不会有问题,后来经同事提醒考虑一下,原来to_single_byte这个函数返回的并不是字符(如果用过Java,可以理解成Object),所以需要强制转换一下,如下
update books set bname_pym = to_char(to_single_byte(bname)) ;
这样写就不会有问题,并且完成了转换的功能。