为AUL增加对NCHAR/NVARCHAR2类型的支持

    有人用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".

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • Would you be so kind as to lend me some money?
  • 你能借我一点儿钱吗?
  • No problem. How much?
  • 没问题, 你要多少?
  • I hope I'm not bothering you.
  • 我希望我没有打扰你.
  • I hope that will not cause you too much trouble.
  • 我希望那不会给你添太多麻烦.
  • I really appreciate your help.
  • 我非常感谢你的帮助.