MySQLデータベースで以下を実行しようとしています。
SELECT * FROM mysql.db
INTO OUTFILE "C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\db.csv"
FIELDS TERMINATED BY '|'
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
エラーが発生します:
SQL Error (1290): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
次を実行すると:
mysql> SELECT @@secure_file_priv;
私は得ます:
+------------------------------------------------+
| @@secure_file_priv |
+------------------------------------------------+
| C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\ |
+------------------------------------------------+
では、set --secure-file-privの場所を使用しているにもかかわらず、なぜファイルをエクスポートしないのですか?
私はMSSQLに慣れており、MySQLは初めてです。
ああ。それは奇抜なタイプミスでした、私の\は/だったはずです
だから私のクエリは今これです:
SELECT * FROM mysql.db INTO OUTFILE "C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/db_pipe.csv" FIELDS TERMINATED BY '|' ENCLOSED BY '"' LINES TERMINATED BY '\n';
以下に記載されているパスの場所を使用することが重要です。
mysql> SELECT @@secure_file_priv;
カスタマイズされたパスの場所を使用する場合でも、このエラーが発生します。 Lateralusが述べたように、パスをスラッシュに変更することを忘れないでください。
これでうまくいきました。二重のバックスラッシュが必要であり、mysqlに接続するためにその間にツールを使用する場合は、エスケープ文字を追加するだけです。
SELECT *
INTO OUTFILE 'C:\\\\ProgramData\\\\MySQL\\\\MySQL Server 8.0\\\\Uploads\\\\employees.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM employees;
私の場合(Windows):
My.iniで、secure_file_priv=""
以下のように、パスにダブルバックスラッシュを使用します。
SELECT description, comment FROM usecase INTO OUTFILE 'C:\\tmp\\usecase0.csv' FIELDS ENCLOSED BY '"' TERMINATED BY ';' ESCAPED BY '"' LINES TERMINATED BY '\r\n';