Δυαδικών δεδομένων σε MySQL

ψήφοι
163

Πώς μπορώ να αποθηκεύουν δυαδικά δεδομένα σε MySQL ;

Δημοσιεύθηκε 01/08/2008 στις 06:09
πηγή χρήστη
Σε άλλες γλώσσες...                            


10 απαντήσεις

ψήφοι
128

Η απάντηση από phpguy είναι σωστό, αλλά νομίζω ότι υπάρχει μεγάλη σύγχυση στις πρόσθετες λεπτομέρειες εκεί.

Η βασική απάντηση βρίσκεται σε μια BLOBπεριοχή δεδομένων Τύπος / χαρακτηριστικό. BLOB είναι μικρή για δυαδικό μεγάλο αντικείμενο και ότι ο τύπος δεδομένων της στήλης είναι ειδικά για το χειρισμό των δυαδικών δεδομένων.

Δείτε τη σχετική σελίδα εγχειριδίου για τη MySQL .

Απαντήθηκε 01/08/2008 στις 13:16
πηγή χρήστη

ψήφοι
54

Για ένα τραπέζι όπως αυτό:

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 IGNORE  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>
Απαντήθηκε 01/08/2008 στις 06:12
πηγή χρήστη

ψήφοι
37

Θα ήθελα να συστήσω ανεπιφύλακτα κατά την αποθήκευση δυαδικών δεδομένων σε μια σχεσιακή βάση δεδομένων. Οι σχεσιακές βάσεις δεδομένων σχεδιαστεί για να λειτουργεί με τα δεδομένα σταθερού μεγέθους? αυτό είναι όπου η δύναμη επιδόσεις τους είναι: να θυμάστε παλιό άρθρο του Ιωήλ σχετικά με το γιατί οι βάσεις δεδομένων είναι τόσο γρήγορα; επειδή παίρνει ακριβώς 1 δείκτη προσαύξηση για να μετακινηθείτε από ένα αρχείο σε ένα άλλο ρεκόρ. Αν προσθέσετε τα δεδομένα BLOB των ακαθόριστων και απέραντα ποικίλου μεγέθους, θα βίδα μέχρι απόδοση.

Αντ 'αυτού, αποθήκευση αρχείων στο σύστημα αρχείων, και τα ονόματα του χώρου αποθήκευσης αρχείων στη βάση δεδομένων σας.

Απαντήθηκε 17/09/2008 στις 21:37
πηγή χρήστη

ψήφοι
20

Ενώ εσείς δεν είπατε τι αποθήκευση, και μπορεί να έχετε ένα μεγάλο λόγο γι 'αυτό, συχνά η απάντηση είναι «ως αναφορά αρχείων» και της πραγματικής δεδομένων στο σύστημα αρχείων κάπου.

http://www.onlamp.com/pub/a/onlamp/2002/07/11/MySQLtips.html

Απαντήθηκε 02/08/2008 στις 15:57
πηγή χρήστη

ψήφοι
16

Εξαρτάται από τα δεδομένα που θέλετε να αποθηκεύσετε. Το παραπάνω παράδειγμα χρησιμοποιεί τον LONGBLOBτύπο δεδομένων, αλλά θα πρέπει να γνωρίζετε ότι υπάρχουν και άλλες δυαδικές μορφές δεδομένων:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

Καθένα από αυτά έχει τις περιπτώσεις χρήσης τους. Αν είναι ένα γνωστό (μικρό) μήκους (π.χ. συσκευασμένα δεδομένων) πολλές φορές BINARYή VARBINARYθα λειτουργήσει. Αυτοί έχουν το πρόσθετο πλεονέκτημα να είναι σε θέση δείκτη τόνο τους.

Απαντήθηκε 31/12/2010 στις 02:04
πηγή χρήστη

ψήφοι
13

Αν και δεν θα πρέπει να είναι απαραίτητο, μπορείτε να δοκιμάσετε base64την κωδικοποίηση δεδομένων μέσα και αποκωδικοποίηση έξω. Αυτό σημαίνει ότι η db θα έχει μόνο χαρακτήρες ASCII. Θα πάρει λίγο περισσότερο χώρο και το χρόνο, αλλά κάθε θέμα να κάνει με θα πρέπει να εξαλειφθούν τα δυαδικά δεδομένα.

Απαντήθηκε 16/09/2008 στις 05:07
πηγή χρήστη

ψήφοι
10

Αν ο - δεν συνιστάται - υπάρχει πεδίο BLOB, μπορείτε να αποθηκεύσετε τα δεδομένα με αυτόν τον τρόπο:

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

Ιδέα που λαμβάνονται από εδώ .

Απαντήθηκε 12/09/2013 στις 13:00
πηγή χρήστη

ψήφοι
9

Όταν χρειάζεται να αποθηκεύουν δυαδικά δεδομένα που χρησιμοποιώ πάντα VARBINARYμορφή, όπως εισήχθη byd0nut.

Μπορείτε να βρείτε τεκμηρίωση στην ιστοσελίδα MySQL σύμφωνα με τεκμηριωμένες θέμα 12.4.2 Το δυαδικό και Τύποι VARBINARY

Αν ρωτάτε τι είναι advantagese, ανατρέξτε στην ερώτηση γιατί-varbinary-αντί-του-varchar

Απαντήθηκε 01/05/2014 στις 10:37
πηγή χρήστη

ψήφοι
9

Το ερώτημα που τίθεται, επίσης, πώς να πάρει τα δεδομένα στο BLOB. Μπορείτε να βάλετε τα δεδομένα σε ένα ένθετο αγνόησης δήλωση, όπως δείχνει το παράδειγμα δείχνει PHP (αν και θα πρέπει να χρησιμοποιήσετε mysql_real_escape_string αντί addslashes). Εάν το αρχείο υπάρχει στο διακομιστή βάσης δεδομένων, μπορείτε επίσης να χρησιμοποιήσετε MySQL για LOAD_FILE

Απαντήθηκε 27/08/2008 στις 16:13
πηγή χρήστη

ψήφοι
8

Μια πολύ καλύτερη εφαρμογή αποθήκευσης διαθέσιμη εδώ . Θα αντιμετωπίσετε προβλήματα με την εφαρμογή Florian του.

Απαντήθηκε 17/09/2008 στις 10:53
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more