Mac(OS X)上でMySQL5.7を使用しています。
テーブルに画像ファイル(JPEG)を格納する、ということを実現するために以下のSQL文を発行しましたが、
nullになってしまいます。
INSERT INTO sample values(1,LOAD_FILE('/private/tmp/sun.jpg'));
ちなみに
・テーブル名:sample
・フィールド:int id,img mediumlob
・画像ファイルのパス:/tmp/sun.jpg
・画像ファイルの大きさ:42126byte
・MySQLの起動ユーザ:_mysql
・MySQLへのログインユーザ:root@localhost
・画像ファイルパスまでの権限:
drwxr-xr-x@ root wheel (中略) private
drwxrwxrwt root wheel (中略) tmp
-rwxrwxrwx@ root staff (中略) sun.jpg
・root@localhostへの権限
+-------------------------------------------------------------------------------------------------------+
|Grants for root@localhost |
+-------------------------------------------------------------------------------------------------------+
|GRANT ALL PRIVILEGES ON . TO 'root'@'localhost' WITH GRANT OPTION |
|GRANT PROXY ON ''@'' to 'root'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------------------------------------------------+
・secure_file_privの値(SHOW VARIABLES LIKE 'secure_file_priv';)
+-------------------+-------+
|Variable_name |Value|
+-------------------+-------+
|secure_file_priv|NULL|
+-------------------+-------+
・max_allowed_packetの値(SHOW VARIABLES LIKE 'max_allowed_packet';)
+---------------------------+------------+
|Variable_name |Value |
+---------------------------+------------+
|max_allowed_packet |4194304|
+---------------------------+------------+
としてあります。
上記で、原因となっている箇所のご指摘をいただければと思います。
よろしくお願い致します。
************
2017/01/31追記①
SHOW CREATE TABLE SAMPLEの結果です。
+-------+---------------------------+
|Table |CreateTable |
|CREATE TABLE 'sample'(
'id' int(11) DEFAULT NULL,
'img' mediumblob
)ENGINE = InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------+
2017/01/31追記②
secure_file_privに新規作成した「/mysql」ディレクトリを設定し、
テーブルに格納したいJPEGファイル(sun.jpg)を移動、再度SQL文を発行したところ、テーブルにファイルが格納されました。
secure_file_privの値は初期値から変更していないはずですが、NULLのためLOAD_FILEが実行できないという記事を見つけましたので、試してみました。
(参照記事:https://yoku0825.blogspot.jp/2015/03/mysql-57load-data-infile-secure-file.html)
ご回答くださった方々、ありがとうございました。
回答3件
あなたの回答
tips
プレビュー