« 将SQLULDR2转义符进行到底 »
Tools » http://www.anysql.net/tools/sqluldr2-more-escape-chars.html 2009-10-27昨天更详细地研究了一下MySQL中的转义符, 其实这不是MySQL专有的, 我们常用的CSV文件格式, 或是Microsoft SQL Server或Sybase能接受的文本文件, 都有同样的转义符定义, 这其实是一个数据交换的标准, 只是Oracle并没有好好地顺从这个标准. 但SQLULDR2的主要任务是将数据从Oracle方便地迁移到其他的数据库, 所以就需要将转义符的支持进行到底了.
最新版本的SQLULDR2可以对六个字符进行转义处理, 指定的转义符本身, 单引号, 双引号, 回车符, 换行符及TAB键. 我们来测试一下, 在一个表的字段值插入这六个字符组成的字符串.
SQL> create table escape_test (col1 varchar2(100));
表已创建。
SQL> INSERT INTO ESCAPE_TEST VALUES ('''\"'||CHR(9)||CHR(13)||CHR(10));
已创建 1 行。
然后用SQLULDR来导出, 需要指定ESCAPE选项.
D:\>sqluldr2 sys query="select * from system.escape_test" escape=\ quote='
0 rows exported at 2009-10-27 09:14:46, size 0 MB.
1 rows exported at 2009-10-27 09:14:46, size 0 MB.
output file uldrdata.txt closed at 1 rows, size 0 MB.
如果是巨量数据导出, 使用ESCAPE选项时性能可能会有很大的下降, 或者CPU的使用量会上升很多.
D:\>type uldrdata.txt
'\'\\\"\t\r\n'
可以看到, 这六个字符全被转义了, 有了这个功能, 可以生成更好的CSV文件, 就可以始终用逗号分隔字符, 用换行分隔记录了, 不必费心地选择字符分隔符与记录分隔符了.


实用啊
好象就对MySQL管用.
看了一下CSV的标准, 及SQL Server的BULK INSERT命令, 转义符的方法都不支持.
[...] « SQLULDR2生成MySQL Insert SQL语句 Tools » http://www.anysql.net/tools/sqluldr2-mysql-insert-sqls.html 2009-10-28 [...]