سؤال

كيف يمكنني تخزين البيانات الثنائية في الخلية?

هل كانت مفيدة؟

المحلول

الجواب من خلال phpguy هو الصحيح ولكن أعتقد أن هناك الكثير من الارتباك في تفاصيل إضافية هناك.

الجواب الأساسية في BLOB نوع البيانات / السمة المجال. النقطة قصيرة ل كائن ثنائي كبير و عمود نوع بيانات محددة للتعامل مع البيانات الثنائية.

انظر ذات الصلة دليل صفحة MySQL.

نصائح أخرى

على مثل هذا الجدول:

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.وسوف يستغرق أكثر قليلا من الفضاء والوقت ، ولكن أي مسألة القيام به مع البيانات الثنائية سيتم القضاء.

إذا كان - لا ينصح - النقطة حقل موجود, يمكنك حفظ البيانات بهذه الطريقة:

mysql_query("UPDATE table SET field=X'".bin2hex($bin_data)."' WHERE id=$id");

الفكرة مأخوذة من هنا.

والسؤال المطروح أيضا كيفية الحصول على البيانات إلى النقطة.يمكنك وضع البيانات في إدراج البيان ، كما PHP يظهر المثال (على الرغم من أن استخدام mysql_real_escape_string بدلا من addslashes).إذا كان الملف موجودا على خادم قاعدة البيانات ، يمكنك أيضا استخدام الخلية LOAD_FILE

عندما تحتاج إلى تخزين البيانات الثنائية أنا دائما استخدام VARBINARY تنسيق, كما قدم byd0nut.

يمكنك العثور على وثائق في موقع ماي في إطار توثيق الموضوع 12.4.2 الثنائية VARBINARY أنواع

إذا كنت تسأل ما هي advantagese ، يرجى النظر في السؤال لماذا varbinary-بدلا-من-varchar

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top