TheLovelySausage Asked: 2016-08-30 05:00:57 +0800 CST2016-08-30 05:00:57 +0800 CST 2016-08-30 05:00:57 +0800 CST Informix DBDELIMITER 选项卡 772 我正在使用 Informix DBEXPORT 来转储我的数据库,但是它使用 | 作为其默认分隔符。 我知道我可以使用 DBDELIMITER 环境变量指定我想使用的定界符,但是如何将它设置为使用制表符 我尝试使用 \t 但这似乎不起作用 (顺便说一句,它在 CentOS 5 服务器上运行) 更新 通过文档检查它说你可以使用 CTRL-I 指定选项卡但是当我将它设置为 CTRL-I 它出现在 unl 文件中作为 ^@ linux export 1 个回答 Voted Best Answer Jonathan Leffler 2016-08-30T10:39:36+08:002016-08-30T10:39:36+08:00 理论上,您需要指定一个实际的选项卡,可能使用 Bash 的ANSI C 引用: $ DBDELIMITER=$'\t' dbexport stores Invalid delimiter; Don't use '\\', SPACE or HEX or Multibyte chars. $ 不幸的是,您似乎也不允许使用制表符。(测试:Mac OS X 10.11.6 上的 Informix 12.10.FC5。) 顺便说一句,我尝试了一些替代方法:$'\a'(alert, aka Control-G) 和$'\b'(backspace, aka Control-H) 都被接受,但是$'\f'(formfeed, aka Control-L), $'\v'(vertical tab, aka Control-K), $'\r'(carriage return, aka Control-M) of $'\n'(newline, aka Control-J)被允许。$'\0'through中的任何其他控制字符$'\037'(八进制数字,除了 9-13 十进制,011-015 八进制)似乎都可以(NUL 或 0 可以正常让我感到惊讶!)。您的主要数据中是否有任何选项卡?如果没有,您可以使用可接受的替代字符之一导出,然后将其映射到制表符。如果您有制表符,生活会更艰难,因为您需要用反斜杠保护数据字段中的所有制表符。 DB-Access 允许DBDELIMITER=$'\t'没有问题并生成一个带有制表符分隔符的卸载文件,所以问题不在我正在使用的 shell 代码中。 如果你确定你必须有选项卡,然后调查 Art Kagel's myexport,它是他来自IIUG Software Repositoryutils_ak的包的一部分,它也使用我的 SQLCMD,可从同一来源获得。使用(或,或命令行的各种其他曲折)以制表符分隔格式生成输出。(就其本身而言,SQLCMD 不处理完整的导出;不过,它会愉快地卸载单个表。它还没有将 NUL 处理为字段分隔符或行分隔符——我需要审查的设计决策或人工制品。)DBDELIMITER=$'\t' sqlunload -d stores -t customerssqlcmd -U -D $'\t' -d stores -t customers
理论上,您需要指定一个实际的选项卡,可能使用 Bash 的ANSI C 引用:
不幸的是,您似乎也不允许使用制表符。(测试:Mac OS X 10.11.6 上的 Informix 12.10.FC5。)
顺便说一句,我尝试了一些替代方法:
$'\a'
(alert, aka Control-G) 和$'\b'
(backspace, aka Control-H) 都被接受,但是$'\f'
(formfeed, aka Control-L),$'\v'
(vertical tab, aka Control-K),$'\r'
(carriage return, aka Control-M) of$'\n'
(newline, aka Control-J)被允许。$'\0'
through中的任何其他控制字符$'\037'
(八进制数字,除了 9-13 十进制,011-015 八进制)似乎都可以(NUL 或 0 可以正常让我感到惊讶!)。您的主要数据中是否有任何选项卡?如果没有,您可以使用可接受的替代字符之一导出,然后将其映射到制表符。如果您有制表符,生活会更艰难,因为您需要用反斜杠保护数据字段中的所有制表符。DB-Access 允许
DBDELIMITER=$'\t'
没有问题并生成一个带有制表符分隔符的卸载文件,所以问题不在我正在使用的 shell 代码中。如果你确定你必须有选项卡,然后调查 Art Kagel's
myexport
,它是他来自IIUG Software Repositoryutils_ak
的包的一部分,它也使用我的 SQLCMD,可从同一来源获得。使用(或,或命令行的各种其他曲折)以制表符分隔格式生成输出。(就其本身而言,SQLCMD 不处理完整的导出;不过,它会愉快地卸载单个表。它还没有将 NUL 处理为字段分隔符或行分隔符——我需要审查的设计决策或人工制品。)DBDELIMITER=$'\t' sqlunload -d stores -t customers
sqlcmd -U -D $'\t' -d stores -t customers