sql >> Base de Datos >  >> RDS >> Mysql

Cómo funciona la función LOAD_FILE() en MySQL

En MySQL, el LOAD_FILE() La función lee un archivo y devuelve su contenido como una cadena.

Sintaxis

La sintaxis es así:

LOAD_FILE(file_name)

Donde file_name es la ruta completa al archivo.

Ejemplo

Aquí hay un ejemplo donde selecciono el contenido de un archivo:

SELECT LOAD_FILE('/data/test.txt') AS Result;

Resultado:

+------------------------------------------+
| Result                                   |
+------------------------------------------+
| This text is all that the file contains! |
+------------------------------------------+

Un ejemplo de base de datos

Este es un ejemplo de cómo se vería una consulta al insertar el contenido del archivo en una base de datos:

INSERT INTO MyTable (FileId, UserId, MyBlobColumn) 
VALUES (1, 20, LOAD_FILE('/data/test.txt'));

En este caso, la columna MyBlobColumn tiene un tipo de datos de BLOB (lo que le permite almacenar datos binarios).

Y ahora que está en la base de datos, podemos seleccionarlo:

SELECT MyBlobColumn
  FROM MyTable
  WHERE UserId = 20;

Resultado:

+------------------------------------------+
| MyBlobColumn                             |
+------------------------------------------+
| This text is all that the file contains! |
+------------------------------------------+

Si el archivo no existe

Si el archivo no existe, NULL se devuelve:

SELECT LOAD_FILE('/data/oops.txt') AS Result;

Resultado:

+--------+
| Result |
+--------+
| NULL   |
+--------+

Más razones por las que podría obtener NULL

También obtendrá NULL no se cumple una de las siguientes condiciones:

  • El archivo debe estar ubicado en el host del servidor.
  • Debe tener el FILE privilegio para leer el archivo. Un usuario que tiene el FILE El privilegio puede leer cualquier archivo en el host del servidor que sea legible por el mundo o por el servidor MySQL.
  • El archivo debe ser legible para todos y su tamaño debe ser inferior a max_allowed_packet bytes Así es como puede comprobarlo:
    SHOW VARIABLES LIKE 'max_allowed_packet';

    Mi resultado:

    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | max_allowed_packet | 67108864 |
    +--------------------+----------+
  • Si secure_file_priv la variable del sistema está establecida en un nombre de directorio no vacío, el archivo que se va a cargar debe estar ubicado en ese directorio. Así es como puede comprobarlo:
    SHOW VARIABLES LIKE 'secure_file_priv';

    Mi resultado:

    +------------------+--------+
    | Variable_name    | Value  |
    +------------------+--------+
    | secure_file_priv | /data/ |
    +------------------+--------+

    En este ejemplo, solo puedo leer archivos de /data/ directorio.