البيانات الثنائية في الخلية [مغلقة]
-
08-06-2019 - |
سؤال
كيف يمكنني تخزين البيانات الثنائية في الخلية?
المحلول
الجواب من خلال phpguy هو الصحيح ولكن أعتقد أن هناك الكثير من الارتباك في تفاصيل إضافية هناك.
الجواب الأساسية في BLOB
نوع البيانات / السمة المجال. النقطة قصيرة ل كائن ثنائي كبير و عمود نوع بيانات محددة للتعامل مع البيانات الثنائية.
نصائح أخرى
على مثل هذا الجدول:
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)
);
هنا هو 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>
وإنني أوصي بشدة ضد تخزين البيانات الثنائية في قاعدة بيانات علائقية.قواعد البيانات العلائقية هي مصممة للعمل مع حجم ثابت البيانات ؛ حيث أدائها القوة هي:تذكر جويل المادة القديمة لماذا قواعد البيانات بسرعة ؟ لأنه يأخذ بالضبط 1 مؤشر الزيادة على الانتقال من سجل إلى سجل آخر.إذا قمت بإضافة البيانات BLOB من غير معرفة بشكل كبير متفاوتة الحجم فسوف تفسد الأداء.
بدلا من تخزين الملفات في نظام الملفات وتخزينها أسماء الملفات في قاعدة البيانات الخاصة بك.
في حين لم تكن قد قال ما كنت تخزين و قد يكون لديك سبب وجيه لذلك ، غالبا ما يكون الجواب هو 'مثل الملفات المرجعية' والبيانات الفعلية على الملفات في مكان ما.
http://www.onlamp.com/pub/a/onlamp/2002/07/11/MySQLtips.html
ذلك يعتمد على البيانات التي ترغب في متجر.المثال أعلاه يستخدم LONGBLOB
نوع البيانات ، ولكن يجب أن تكون على علم أن هناك غيرها من البيانات الثنائية صيغ:
TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY
كل من لديه حالات الاستخدام.إذا كان هو المعروف (قصيرة) طول (مثلا ، معبأة البيانات) في كثير من الأحيان BINARY
أو VARBINARY
سوف تعمل.لديهم فائدة إضافية تتمثل في كونها قادرة طن مؤشر عليها.
في حين أنه ليس من الضروري ، قد تتمكن من محاولة base64
ترميز البيانات في فك ذلك.وهذا يعني db سوف يكون مجرد أحرف ascii.وسوف يستغرق أكثر قليلا من الفضاء والوقت ، ولكن أي مسألة القيام به مع البيانات الثنائية سيتم القضاء.
والسؤال المطروح أيضا كيفية الحصول على البيانات إلى النقطة.يمكنك وضع البيانات في إدراج البيان ، كما PHP يظهر المثال (على الرغم من أن استخدام mysql_real_escape_string بدلا من addslashes).إذا كان الملف موجودا على خادم قاعدة البيانات ، يمكنك أيضا استخدام الخلية LOAD_FILE
عندما تحتاج إلى تخزين البيانات الثنائية أنا دائما استخدام VARBINARY
تنسيق, كما قدم byd0nut
.
يمكنك العثور على وثائق في موقع ماي في إطار توثيق الموضوع 12.4.2 الثنائية VARBINARY أنواع
إذا كنت تسأل ما هي advantagese ، يرجى النظر في السؤال لماذا varbinary-بدلا-من-varchar