pagina imagen guardar ejemplo descargar datos conectar con campos archivos almacenar mysql database binary-data data-storage

imagen - Datos binarios en MySQL



guardar imagen en mysql php (9)

Cuando necesito almacenar datos binarios, siempre uso el formato VARBINARY , tal como lo presentó byd0nut .

Puede encontrar documentación en el sitio web de MySQL bajo el tema documentado 12.4.2 Los tipos BINARIO y VARBINARIO

Si está preguntando cuáles son las ventajas, consulte la pregunta why-varbinary-instead-of-varchar

¿Cómo almaceno datos binarios en MySQL ?


Depende de los datos que desea almacenar. El ejemplo anterior utiliza el tipo de datos LONGBLOB , pero debe tener en cuenta que existen otros formatos de datos binarios:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

Cada uno tiene sus casos de uso. Si se trata de una longitud conocida (corta) (por ejemplo, datos empaquetados), muchas veces BINARY o VARBINARY funcionarán. Tienen el beneficio adicional de poder indexarlos.


La respuesta de phpguy es correcta, pero creo que hay mucha confusión en los detalles adicionales allí.

La respuesta básica está en un dominio de tipo de datos / atributo BLOB . BLOB es la abreviatura de Binary Large Object y ese tipo de datos de columna es específico para manejar datos binarios.

Consulte la página del manual correspondiente para MySQL .


Para una mesa como esta:

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) );

Aquí hay un ejemplo de PHP:

<?php // store.php3 - by Florian Dittmer <[email protected]> // 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>


Recomiendo no almacenar datos binarios en una base de datos relacional. Las bases de datos relacionales están diseñadas para trabajar con datos de tamaño fijo; ahí es donde está su fortaleza de rendimiento: recuerde el antiguo artículo de Joel sobre por qué las bases de datos son tan rápidas porque se necesita exactamente un incremento de 1 puntero para moverse de un registro a otro registro. Si agrega datos BLOB de tamaño indefinido y muy variable, arruinará el rendimiento.

En su lugar, almacene los archivos en el sistema de archivos y los nombres de los archivos en su base de datos.


Si bien no debería ser necesario, puede intentar codificar los datos en base64 y descodificarlos. Eso significa que la base de datos solo tendrá caracteres ascii. Tomará un poco más de espacio y tiempo, pero se eliminará cualquier problema relacionado con los datos binarios.



Si existe el campo - no recomendado - BLOB, puede guardar los datos de esta manera:

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

Idea tomada de here .


También surge la pregunta de cómo introducir los datos en el BLOB. Puede poner los datos en una instrucción INSERT, como muestra el ejemplo de PHP (aunque debe usar mysql_real_escape_string lugar de addlashes). Si el archivo existe en el servidor de la base de datos, también puede usar LOAD_FILE de MySQL