SELECT … INTO 構文でエラーになる意外な原因 | MySQL, Windows

パスの指定にバックスラッシュを使うと、出力が許されているディレクトリであっても、エラーになります(スラッシュを使うとエラーになりません)。


この記事で使用したソフトウェアのバージョンを記載しておきます。
バージョンが異なると、動作や表示も若干異なる場合があるからです。

  • Windows 10
  • MySQL 8.0



SELECT … INTO 構文とは

SELECT … INTO 構文は、クエリ結果をファイルへ出力する場合などに使います

ただし、secure_file_privシステム変数が空でない場合、出力先のディレクトリは制限されます。

参考:
13.2.10.1 SELECT … INTO Syntax(version 8.0 English)
13.2.9.1 SELECT … INTO 構文(version 5.6 Japanese)
SELECT INTO 構文を使わず、クエリ結果をCSVファイルに出力する方法

出力が許されるディレクトリ

出力が許されるディレクトリは、こちらのコマンドで確認できます。

mysql> SELECT @@global.secure_file_priv;                                                              
+------------------------------------------------+                                                                    
| @@global.secure_file_priv                      |                                                                    
+------------------------------------------------+                                                                    
| C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ |                                                                    
+------------------------------------------------+
1 row in set (0.00 sec)

エラーになる場合とならない場合

上記のディレクトリを素直に出力先に指定し、SELECT INTO構文を使います
すると、エラーになります。

mysql> SELECT * FROM test_table INTO OUTFILE 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\result.csv';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

原因は、パスの指定にバックスラッシュを使っていることのようです。

バックスラッシュの代わりにスラッシュを使ってパスを指定します
するとエラーにならず、クエリ結果のファイルへの出力は成功します。

mysql> SELECT * FROM test_table INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/result.csv';               
Query OK, 22680 rows affected (0.14 sec)

おわりに

MySQLのSELECT … INTO 構文でエラーになる、意外な原因について説明しました。
Windowsなのでバックスラッシュが正解かと思いきや、スラッシュが正解でしたね。
ご注意下さい。
では。


YouTube: ミサキさん

問い合わせ先
Mail: caprico.aries@gmail.com
Twitter: https://twitter.com/caprico_aries(無言フォローもお気軽に)

コメント

タイトルとURLをコピーしました