171


19

バイナリデータを MySQLに格納するにはどうすればよいですか?

9 Answer


135


phpguyの答えは正しいですが、追加の詳細には混乱が多いと思います。

基本的な答えは `BLOB`データ型/属性ドメインにあります。 * BLOB *はBinary Large Objectの略で、その列のデータ型はバイナリデータの処理に固有のものです。

http://dev.mysql.com/doc/refman/5.7/en/blob.html [MySQLの関連マニュアルページ]を参照してください。


57


このようなテーブルの場合:

CREATE TABLE binary_data(id INT(4)NOT NULL AUTO_INCREMENT PRIMARY KEY、説明CHAR(50)、bin_data LONGBLOB、ファイル名CHAR(50)、ファイルサイズCHAR(50)、ファイルタイプCHAR(50))。

これがPHPの例です。

//バイナリファイルをSQLデータベースに格納する方法を示すphpスクリプトの例。 より多くの情報はhttp://www.phpbuilder.com/で見つけることができますか?>

SQLデータベースにバイナリデータを保存する

ファイル説明:

データベースにアップロード/保存するファイル:


39


バイナリデータをリレーショナルデータベースに格納することに対して*強く*推奨しません。 リレーショナルデータベースは、固定サイズのデータ​​を扱うように設計されています。それが彼らのパフォーマンスの強みであるところです:なぜデータベースがこんなに速いのかについて Joel’s old articleを覚えていますか? レコードから別のレコードに移動するには正確に1ポインタインクリメントがかかるためです。 未定義でサイズが大きく異なるBLOBデータを追加すると、パフォーマンスが低下します。

代わりに、ファイルをファイルシステムに保存し、ファイル名をデータベースに保存してください。


23


何を格納しているのかまだ述べていませんが、それを行う大きな理由があるかもしれませんが、多くの場合、答えは「ファイルシステムの参照として」であり、実際のデータはどこかのファイルシステムにあります。


17


保存したいデータによって異なります。 上記の例では `LONGBLOB`データ型を使用していますが、他にもバイナリデータ形式があることに注意する必要があります。

TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB` VARBINARY` BINARY

それぞれにユースケースがあります。 それが既知の(短い)長さの場合(例: パックされたデータ)はしばしば BINARY`や VARBINARY`でうまくいくでしょう。 彼らは彼らにインデックスを作成できるという追加の利点があります。


14


必要ではないはずですが、 `base64`でデータをエンコードしたりデコードしたりすることができます。 つまり、dbはASCII文字だけを持ちます。 もう少しスペースと時間がかかりますが、バイナリデータに関する問題はすべて解消されます。


11


  • 非推奨 - BLOBフィールドが存在する場合は、次の方法でデータを保存できます。

mysql_query( "UPDATEテーブルSETフィールド= X '"。bin2hex($ bin_data)。 "' WHERE id = $ id");
https://stackoverflow.com/q/2558453/669677[ここから]のアイデア。


10


どのようにしてデータをBLOBに入れるかという問題も生じます。 PHPの例が示すように、データをINSERTステートメントに入れることができます(ただし、アドレスの代わりに mysql_real_escape_stringを使用する必要があります)。 ファイルがデータベースサーバーに存在する場合は、MySQLの LOAD_FILEを使用することもできます。


10


バイナリデータを保存する必要があるときは、 byd0nut`で紹介されているように、常に VARBINARY`フォーマットを使います。

MySQLのWebサイトで文書化されたトピックhttp://dev.mysql.com/doc/refman/5.0/en/binary-varbinary.html [12.4.2 BINARYおよびVARBINARY型]の下に文書を見つけることができます。

あなたが何が有利であるか尋ねているならば、質問https://stackoverflow.com/questions/13393718/why-varbinary-instead-of-varchar [why-varbinary-instead-of-varchar]を見てください