• 締切
  • 暇なときにでも

mysqlバッチモードでのエスケープ文字

  • 質問No.1426691
  • 閲覧数537
  • ありがとう数1
  • 回答数2

お礼率 66% (2/3)

mysqlでエスケープ文字を含んだファイルをバッチモードでクエリーを実行させた時、エスケープ文字がそのまま出力ファイルに記述されます。(\tがTABにならずに、\tのまま出力される)
バッチモードの場合、どのようにしたらエスケープ文字を正常に出力させる事が出来るのでしょうか。
ちなみに、同様のクエリーをmysql(コマンドラインツール)を起動して直接入力し動作させる、
およびMysql Control Centerで行うと、期待通りの表示(\tはTAB)になります。
よろしくお願いします。Mysqlは ver4.0.18-max-ntです。

回答 (全2件)

  • 回答No.2

ベストアンサー率 32% (245/765)

linuxでも症状は同じでした。select 'a\tb';というsql文でテストしましたが、mysql上でsqlを入力するとちゃんと[tab]が表現されますが、mysql < test.sqlとすると1行目、行の見出し部分は[tab]になるのですが2行目の結果の部分は「a\tb」と表示されてしまいますね。

最初はシェルが勝手に\tをエスケープしているのかと思ったのですが1行目が[tab]になっているところを見るとそうではないようで。

原因がわからなければ適当な区切り文字で一旦出力して、その後タブに置換したらどうでしょうか。
お礼コメント
fucha

お礼率 66% (2/3)

ありがとうございました。結局バッチモードではエスケープ文字はうまく表現できないと解釈するしかないようですね。ちなみにPostgreでは出来てました。
投稿日時:2005/06/07 08:38
  • 回答No.1

ベストアンサー率 32% (245/765)

\tを\\tにしたらどうなりますか?
補足コメント
fucha

お礼率 66% (2/3)

\tを\\tにしても、出力ファイルには\\tが出力されました。

ちなみに、dos窓で以下のようにして実行しています。
c:\mysql\bin>mysql -u root -p <mysql -u root -p <./test.sql >./test_out.txt

http://dev.mysql.com/doc/mysql/ja/batch-mode.htmlにWindowsでの特殊文字による問題発生の場合が示されていたので、
c:\mysql\bin>mysql -u root -p -e "source ./test.sql" >"./test_out.txt"
としても、結果は同様でした。

クエリ(test.sql)の中身
use shop;
select concat(EmployeeName, "さん\t", "[E-MAIL]\t", EMail) as "[連絡先]" from Employees;

結果(test_out.txt)
[連絡先]
AAAさん\t[E-MAIL]\tAAA@test
BBBさん\t[E-MAIL]\tBBB@test
CCCさん\t[E-MAIL]\tCCC@test

mysql(コマンドラインツール),Mysql Control Centerでは、test.sqlの中身をカット&ペーストして行っています。
投稿日時:2005/06/03 16:05
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ