« 为AUL增加对NCHAR/NVARCHAR2类型的支持 »
AUL/MyDUL » http://www.anysql.net/aulmydul/aul_update_323.html 2006-12-05有人用AUL去恢复带有NCHAR/NVARCHAR2类型列的表时, 遇到了问题, 导成文本方式则不知道如何用SQLLDR装入到新的数据库中, 而恢复成DMP格式时, 则导入后变成乱码. 这是因为AUL在设计时没有考虑NCHAR/NVARCHAR2这样的数据类型. 其原因是数据库的字符集是WE8ISO8859P1, 一个单字节的字符集, 而民族语言字符集则为AL16UTF16, 一个双字节的UNICODE字符集. 用AUL恢复时是不进行任何字符集转换的, 于是导出的文本文件中就有两种字符集了. 而在DMP文件中对于不同的列类型, 其内部的格式有所不同.
我花了三个小时增加了DMP格式对NCHAR/NVARCHAR2的支持, 看在AUL中DESC一个表的结果:
AUL> DESC SYS.TEST_NCHAR
Storage(OBJ#=9876 OBJD=9876 TS=0 FILE=1 BLOCK=28465 CLUSTER=0)
No. SEQ INT Column Name Type
--- --- --- ---------------- ----------------
1 1 1 COL1 NVARCHAR2(100)
2 2 2 COL2 NVARCHAR2(100)
并增加了一个"SET NLSCHARSET"命令, 默认NLSCHARSET为2000, 指AL16UTF16. 如果你在我网上的字符集表(根据8i制作)中找不到某个字符集的ID, 你可以下载AnySQL来查询, 连接到数据库后用"ORA CHARSET charset"来获得字符集编号, 如下所示:
ASQL> ORA CHARSET AL
ID HEX_ID CHARSET_NAME
---- ------ ------------
870 0366 AL24UTFFSS
873 0369 AL32UTF8
2000 07D0 AL16UTF16
3 rows returned.
Windows和Linux平台的可执行文件已经更新, 版本号变为"3.2.3".


Recent Comments