Archive for February 26th, 2008
UTF8字符集下如何做数据订正
Tuesday, February 26th, 2008
在utf8字符集的数据库中如何做数据订正.这个问题对我们DBA来说是比较现实的.
矛盾在于当数据库是UTF8时, 我们用Windows的操作系统如何input到数据库一个UTF8的文本.
经过多次的探索, 发现有三种方式.
1. 当Windows是简体中文操作系统时, 一个普通的txt文件(或者sql文件)都是ZHS16GBK格式的,
这个时候如果我们期望输入数据库的UTF8文本都是属于ZHS16GBK字符集时
(简单的说就是我们想输入简体中文或繁体中文时),
直接走SecureCRT 输入的中文都可以自动被转化为UTF8的格式.
与做普通字符集的数据订正没有区别.
2.当Windows是简体中文操作系统时, 如果我们期望输入数据库的UTF8文本不属于ZHS16GBK字符集时,
有两种方法把真正的UTF8字符输入给数据库
第一种:
把需要输入的文本保存为UTF8格式, 然后本机的NLS_LANG=AMERICAN_AMERICA.UTF8,
然后用SQLLDR到数据库中, 就可以了.
第二种:
把需要执行的SQL文件保存为UTF8格式, 然后SCP到对应的服务器上, 服务器的NLS_LANG=AMERICAN_AMERICA.UTF8,
然后在sqlplus里面用@操作符来调用这个SQL文件, 就可以了.
最后一种方法比较简便, 我举个例子说明一下:
‘アイウエオ’这串字符是半角的日文, 不属于ZHS16GBK字符集.
那把如下的语句保存为名为test.sql的文件
select ‘アイウエオ’, dump(’アイウエオ’,1016) from dual;
文件保存的格式选择为utf8.
然后scp到服务器上.
[admin@japan_db1 jonathan]$ env|grep NLS_L
NLS_LANG=AMERICAN_AMERICA.UTF8
ops$admin@JAPAN>l
1* select ‘アイウエオ’, dump(’アイウエオ’,1016) from dual
ops$admin@JAPAN>@test
SP2-0042: unknown command “” - rest of line ignored.
‘アイウエ�� DUMP(’アイウエオ’,1016)
アイウエオ Typ=96 Len=15 CharacterSet=UTF8: ef,bd,b1,ef,bd,b2,ef,bd,b3,ef,bd,b4,ef,bd,b5
Elapsed: 00:00:00.00
ops$admin@JAPAN>spool off
08年——给team兄弟,以及我自己
Tuesday, February 26th, 2008
承担更大的责任
体现更大的价值
获得更大的成长


