プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (2件)

linuxでも症状は同じでした。

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

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

原因がわからなければ適当な区切り文字で一旦出力して、その後タブに置換したらどうでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/06/07 08:38

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

この回答への補足

\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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!