• 締切済み

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

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

みんなの回答

回答No.2

linuxでも症状は同じでした。select 'a\tb';というsql文でテストしましたが、mysql上でsqlを入力するとちゃんと[tab]が表現されますが、mysql < test.sqlとすると1行目、行の見出し部分は[tab]になるのですが2行目の結果の部分は「a\tb」と表示されてしまいますね。 最初はシェルが勝手に\tをエスケープしているのかと思ったのですが1行目が[tab]になっているところを見るとそうではないようで。 原因がわからなければ適当な区切り文字で一旦出力して、その後タブに置換したらどうでしょうか。

fucha
質問者

お礼

ありがとうございました。結局バッチモードではエスケープ文字はうまく表現できないと解釈するしかないようですね。ちなみにPostgreでは出来てました。

回答No.1

\tを\\tにしたらどうなりますか?

fucha
質問者

補足

\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の中身をカット&ペーストして行っています。

関連するQ&A