2012-05-24 20 views
18

Quiero almacenar imágenes y archivos .docx/.doc, .pptx/.ppt, .pdf usando la parte frontal de mi software. No entiendo cómo implementar esto y cómo insertar los archivos BLOB y CLOB en la tabla. Por favor ayuda.¿Cómo insertar archivos BLOB y CLOB en MySQL?

Estoy usando Kubuntu 11.04, MySQL5, Qt 4.7.3.

Respuesta

23

dos maneras:

1 - utilizar una función LOAD_FILE -

INSERT INTO table1 VALUES(1, LOAD_FILE('data.png')); 

2 - Insertar archivo como cadena hexadecimal, por ejemplo, -

INSERT INTO table1 VALUES 
    (1, x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082'); 
+2

Una tercera opción es cerca de la segunda uno y lee como 'INSERT INTO tabla1 VALORES (1, 0x89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082);'. – glglgl

+0

Lo siguiente no funciona: INSERT INTO table1 VALUES (1, LOAD_FILE (data.png)); – user1411472

+1

Verifique si el archivo existe, verifique la ruta, verifique el tamaño del archivo, si es más o menos 'max_allowed_packet'. ¿Tienes privilegio FILE? ¿Qué tipo de campo BLOB es suficiente para almacenar el archivo? – Devart

1
INSERT INTO table1 VALUES(1, LOAD_FILE(data.png)); 

no va a funcionar, pero (suponiendo que existe data.png en el directorio local)

INSERT INTO table1 VALUES(1, LOAD_FILE('data.png')); 

debe

11
INSERT INTO MY_TABLE(id, blob_col) VALUES(1, LOAD_FILE('/full/path/to/file/myfile.png') 

LOAD_FILE tiene muchas condiciones que se le atribuye. Desde el MySQL documentation:

LOAD_FILE (nombre_archivo)

lee el archivo y devuelve el contenido del archivo como una cadena. Para usar esta función , el archivo debe estar ubicado en el host del servidor, debe especificar el nombre completo de la ruta del archivo, y debe tener el privilegio FILE . El archivo debe ser legible por todos y por su tamaño inferior a max_allowed_packet bytes. Si la variable de sistema secure_file_priv es configurada en un nombre de directorio no vacío, el archivo que se debe cargar debe ser ubicado en ese directorio.

Si el archivo no existe o no se puede leer porque una de las condiciones anteriores no se cumple, la función devuelve NULL.

Además, hay errores con LOAD_FILE en Linux. Consulte http://bugs.mysql.com/bug.php?id=38403 para el error y MySQL LOAD_FILE returning NULL para soluciones provisionales. En Ubuntu 12.04, MySQL 5.5.32, esto funciona para mí:

  1. archivo de copia a/tmp
  2. cambio de propiedad de usuario de MySQL chown mysql:mysql /tmp/yourfile
  3. Entrar en MySQL como usuario root de MySQL por lo que está seguro de tener privilegio FILE
  4. ejecutar su sentencia de inserción
+0

La pista 'secure_file_priv' me salvó el día. Use 'mysql> SELECT @@ secure_file_priv;' para ver el valor real –

3

O puede simplemente usar el MySQL Workbench, seleccione las filas, últimas filas, insertar una fila sin la representación de nota, haga clic a continuación, sólo la derecha y selecciona "Valor de carga desde archivo" .

Cuestiones relacionadas