1

bashMySQL ステートメントを実行しているスクリプトがあります。

#!/usr/bin/env bash

mysql -N --user=foo --password=bar --host=baz -A -D db -e '\
    SELECT ... \
    FROM fieldA, fieldB \
    LIMIT 100'

これはうまくいきます。ただし、これが返す表形式の代わりに、タブ区切りの結果を取得したいと思います。

次のことを試しましたが、構文エラーが発生します。

#!/usr/bin/env bash

mysql -N --user=foo --password=bar --host=baz -A -D db -e '\
    SELECT ... \
    FROM fieldA, fieldB \
    LIMIT 100 \
    FIELDS TERMINATED BY "\t"'

エラーは次のとおりです。

ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FIELDS TERMINATED BY "\t"' at line 10

私も試しました

    ...
    FIELDS TERMINATED BY \'\t\''

しかし、同じエラーが発生します。

この種の MySQL の実行からフィールド ターミネータを変更する正しい方法はありますか? アドバイスありがとうございます。

4

1 に答える 1

2

mysql クライアントの man ページによると:

対話的に使用すると、クエリ結果は ASCII テーブル形式で表示されます。非対話的に (たとえば、フィルターとして) 使用すると、結果はタブ区切り形式で表示されます。

を使用する-eと、mysql はそれを対話型コマンドとして扱います。ただし、クライアントは標準入力を介して入力を受け入れることもできます。これはあなたが望むものです:

mysql -N --user=foo --password=bar --host=baz -A db <<-'EOF'
    SELECT ...
    FROM fieldA, fieldB
    LIMIT 100
EOF
于 2012-11-29T23:04:58.907 に答える