En MariaDB, el LOAD_FILE()
La función lee un archivo y devuelve el contenido del archivo como una cadena.
Sintaxis
La sintaxis es así:
LOAD_FILE(file_name)
Donde file_name
es el nombre completo de la ruta al archivo.
Ejemplo
Supongamos que tenemos un archivo llamado pets.csv
que contiene el siguiente texto:
1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat"
Podemos usar el LOAD_FILE()
función para leer y devolver esos contenidos:
SELECT LOAD_FILE('/Users/barney/data/pets.csv');
Resultado:
+---------------------------------------------+ | LOAD_FILE('/Users/barney/data/pets.csv') | +---------------------------------------------+ | 1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat" | +---------------------------------------------+ 1 row in set (0.186 sec)
En este caso, la ruta completa al archivo es /Users/barney/data/pets.csv
.
Ruta de archivo o privilegios incorrectos
Proporcionar una ruta de archivo que no satisfaga los siguientes criterios da como resultado null
:
- El archivo debe estar ubicado en el host del servidor, debe especificar el nombre completo de la ruta al archivo y debe tener el
FILE
privilegio. - El archivo debe ser legible para todos y debe tener un tamaño menor que el tamaño, en bytes, del
max_allowed_packet
variable del sistema. - Si
secure_file_priv
variable del sistema se establece en un nombre de directorio no vacío, el archivo que se va a cargar debe estar ubicado en ese directorio.
Así es como se verifican esas dos variables del sistema:
SELECT
@@GLOBAL.secure_file_priv,
@@GLOBAL.max_allowed_packet;
Resultado:
+---------------------------+-----------------------------+ | @@GLOBAL.secure_file_priv | @@GLOBAL.max_allowed_packet | +---------------------------+-----------------------------+ | NULL | 16777216 | +---------------------------+-----------------------------+
En mi caso, no tengo ningún directorio especificado en secure_file_priv
variable del sistema y mi max_allowed_packet
la variable está establecida en su valor predeterminado (que es más que suficiente para el archivo que cargué en el ejemplo anterior).
Sin embargo, esto es lo que sucede cuando intento cargar un archivo que no existe:
SELECT LOAD_FILE('pets.csv');
Resultado:
+-----------------------+ | LOAD_FILE('pets.csv') | +-----------------------+ | NULL | +-----------------------+ 1 row in set (0.000 sec)
En este caso, olvidé especificar la ruta completa al archivo.
Nombres de archivos de varios bytes
El character_set_filesystem
La variable del sistema se utiliza para controlar la interpretación de los nombres de archivo que se dan como cadenas literales. Se usa para convertir nombres de archivo especificados como una cadena literal de character_set_client
a character_set_filesystem
antes de abrir el archivo.
Por defecto, character_set_filesystem
se establece en binary
, por lo que no se produce ninguna conversión.
Puede verificar este valor usando el siguiente código:
SELECT @@GLOBAL.character_set_filesystem;
Resultado:
+-----------------------------------+ | @@GLOBAL.character_set_filesystem | +-----------------------------------+ | binary | +-----------------------------------+
Ruta de archivo nula
Proporcionar un null
la ruta del archivo da como resultado null
:
SELECT LOAD_FILE(null);
Resultado:
+-----------------+ | LOAD_FILE(null) | +-----------------+ | NULL | +-----------------+ 1 row in set (0.000 sec)
Ruta de archivo faltante
Si no proporciona una ruta de archivo, se produce un error:
SELECT LOAD_FILE();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOAD_FILE'