Bagaimana cara menyimpan data biner di MySQL ?
Bagaimana cara menyimpan data biner di MySQL ?
Jawaban:
Jawaban oleh phpguy benar tetapi saya pikir ada banyak kebingungan dalam detail tambahan di sana.
Jawaban dasarnya adalah dalam BLOB
tipe data / atribut domain. BLOB adalah kependekan dari Binary Large Object dan tipe data kolom itu khusus untuk menangani data biner.
Untuk tabel seperti ini:
CREATE TABLE binary_data (
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
description CHAR(50),
bin_data LONGBLOB,
filename CHAR(50),
filesize CHAR(50),
filetype CHAR(50)
);
Berikut ini adalah contoh PHP:
<?php
// store.php3 - by Florian Dittmer <dittmer@gmx.net>
// Example php script to demonstrate the storing of binary files into
// an sql database. More information can be found at http://www.phpbuilder.com/
?>
<html>
<head><title>Store binary data into SQL Database</title></head>
<body>
<?php
// Code that will be executed if the form has been submitted:
if ($submit) {
// Connect to the database (you may have to adjust
// the hostname, username or password).
mysql_connect("localhost", "root", "password");
mysql_select_db("binary_data");
$data = mysql_real_escape_string(fread(fopen($form_data, "r"), filesize($form_data)));
$result = mysql_query("INSERT INTO binary_data (description, bin_data, filename, filesize, filetype) ".
"VALUES ('$form_description', '$data', '$form_data_name', '$form_data_size', '$form_data_type')");
$id= mysql_insert_id();
print "<p>This file has the following Database ID: <b>$id</b>";
mysql_close();
} else {
// else show the form to submit new data:
?>
<form method="post" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data">
File Description:<br>
<input type="text" name="form_description" size="40">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
<br>File to upload/store in database:<br>
<input type="file" name="form_data" size="40">
<p><input type="submit" name="submit" value="submit">
</form>
<?php
}
?>
</body>
</html>
Saya sangat merekomendasikan untuk tidak menyimpan data biner dalam basis data relasional. Database relasional dirancang untuk bekerja dengan data ukuran tetap; di situlah kekuatan kinerja mereka: ingat artikel lama Joel tentang mengapa database begitu cepat? karena dibutuhkan tepat peningkatan 1 pointer untuk berpindah dari satu record ke record lainnya. Jika Anda menambahkan data BLOB dengan ukuran yang tidak terdefinisi dan sangat bervariasi, Anda akan mengacaukan kinerja.
Sebagai gantinya, simpan file dalam sistem file, dan simpan nama file dalam database Anda.
Walaupun Anda belum mengatakan apa yang Anda simpan, dan Anda mungkin memiliki alasan yang bagus untuk melakukannya, seringkali jawabannya adalah 'sebagai referensi sistem file' dan data aktual ada di sistem file di suatu tempat.
http://www.onlamp.com/pub/a/onlamp/2002/07/11/MySQLtips.html
Itu tergantung pada data yang ingin Anda simpan. Contoh di atas menggunakan LONGBLOB
tipe data, tetapi Anda harus menyadari bahwa ada format data biner lainnya:
TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY
Masing-masing memiliki kasing masing-masing. Jika diketahui panjang (pendek) (mis. Data yang dikemas) sering kali BINARY
atau VARBINARY
akan bekerja. Mereka memiliki manfaat tambahan karena dapat melakukan indeks pada mereka.
Meskipun seharusnya tidak perlu, Anda dapat mencoba base64
menyandikan data dan mendekodekannya. Itu berarti db hanya akan memiliki karakter ascii. Ini akan membutuhkan sedikit lebih banyak ruang dan waktu, tetapi masalah apa pun yang berkaitan dengan data biner akan dihilangkan.
Jika bidang - tidak disarankan - BLOB ada, Anda dapat menyimpan data dengan cara ini:
mysql_query("UPDATE table SET field=X'".bin2hex($bin_data)."' WHERE id=$id");
Ide diambil dari sini .
Muncul juga pertanyaan bagaimana cara memasukkan data ke BLOB. Anda bisa memasukkan data dalam pernyataan INSERT, seperti yang ditunjukkan oleh contoh PHP (meskipun Anda harus menggunakan mysql_real_escape_string alih-alih addlash). Jika file ada di server database, Anda juga dapat menggunakan LOAD_FILE MySQL
Ketika saya perlu menyimpan data biner saya selalu menggunakan VARBINARY
format, seperti yang diperkenalkan byd0nut
.
Anda dapat menemukan dokumentasi di situs web MySQL dengan topik yang didokumentasikan 12.4.2 Jenis BINARY dan VARBINARY
Jika Anda bertanya apa yang diuntungkan, silakan lihat pertanyaan mengapa-varbinary-bukan-of-varchar