Informix DBDELIMITER 選項卡
我正在使用 Informix DBEXPORT 轉儲我的數據庫,但是它使用 | 作為其預設分隔符。
我知道我可以使用 DBDELIMITER 環境變數指定我想使用的分隔符,但是如何將其設置為使用製表符
我嘗試使用 \t 但這似乎不起作用
(順便說一句,它在 CentOS 5 伺服器上執行)
更新
檢查文件,它說您可以使用 CTRL-I 指定選項卡,但是當我將其設置為 CTRL-I 時,它在 unl 文件中顯示為 ^@
理論上,您需要指定一個實際的選項卡,可能使用 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, akaControl-G
) 和$'\b'
(backspace, akaControl-H
) 都被接受,但是$'\f'
(formfeed, akaControl-L
)、$'\v'
(vertical tab, akaControl-K
)、$'\r'
(carriage return, akaControl-M
) 的$'\n'
(newline, akaControl-J
)都沒有被允許。任何其他控製字元(八進制數,除了 9-13 十進制,$'\0'
011-015$'\037'
八進制)似乎都可以(並且 NUL 或 0 可以讓我感到驚訝!)。您的主要數據中有任何標籤嗎?如果沒有,您可以使用可接受的替代字元之一導出,然後將其映射到選項卡。如果您有標籤,生活會更加艱難,因為您需要使用反斜杠保護數據欄位中的任何標籤。DB-Access 允許
DBDELIMITER=$'\t'
沒有問題並生成帶有製表符分隔符的解除安裝文件,因此問題不在我正在使用的 shell 程式碼中。如果您確定必須有選項卡,請調查 Art Kagel’s ,它是IIUG Software Repository
myexport
中他的utils_ak
軟體包的一部分,它也使用我的 SQLCMD,可從同一來源獲得。使用(或,或命令行的各種其他變體)以製表符分隔格式生成輸出。(就其本身而言,SQLCMD 不處理完整的導出;不過,它會愉快地解除安裝單個表。它還沒有將 NUL 作為欄位分隔符或行分隔符處理——這是我需要審查的設計決策或人工製品。)DBDELIMITER=$'\t' sqlunload -d stores -t customers``sqlcmd -U -D $'\t' -d stores -t customers