In MariaDB, il LOAD_FILE()
la funzione legge un file e restituisce il contenuto del file come stringa.
Sintassi
La sintassi è questa:
LOAD_FILE(file_name)
Dove file_name
è il percorso completo del file.
Esempio
Supponiamo di avere un file chiamato pets.csv
che contiene il seguente testo:
1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat"
Possiamo usare il LOAD_FILE()
funzione per leggere e restituire quei contenuti:
SELECT LOAD_FILE('/Users/barney/data/pets.csv');
Risultato:
+---------------------------------------------+ | LOAD_FILE('/Users/barney/data/pets.csv') | +---------------------------------------------+ | 1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat" | +---------------------------------------------+ 1 row in set (0.186 sec)
In questo caso, il percorso completo del file è /Users/barney/data/pets.csv
.
Percorso file o privilegi errati
Fornire un percorso file che non soddisfa i seguenti criteri restituisce null
:
- Il file deve trovarsi sull'host del server, devi specificare il percorso completo del file e devi avere il
FILE
privilegio. - Il file deve essere leggibile da tutti e deve essere inferiore alla dimensione, in byte, del
max_allowed_packet
variabile di sistema. - Se il
secure_file_priv
la variabile di sistema è impostata su un nome di directory non vuoto, il file da caricare deve trovarsi in quella directory.
Ecco come controllare queste due variabili di sistema:
SELECT
@@GLOBAL.secure_file_priv,
@@GLOBAL.max_allowed_packet;
Risultato:
+---------------------------+-----------------------------+ | @@GLOBAL.secure_file_priv | @@GLOBAL.max_allowed_packet | +---------------------------+-----------------------------+ | NULL | 16777216 | +---------------------------+-----------------------------+
Nel mio caso, non ho alcuna directory specificata in secure_file_priv
variabile di sistema e il mio max_allowed_packet
la variabile è impostata sul valore predefinito (che è più che sufficiente per il file che ho caricato nell'esempio precedente).
Tuttavia, ecco cosa succede quando provo a caricare un file che non esiste:
SELECT LOAD_FILE('pets.csv');
Risultato:
+-----------------------+ | LOAD_FILE('pets.csv') | +-----------------------+ | NULL | +-----------------------+ 1 row in set (0.000 sec)
In questo caso, ho dimenticato di specificare il percorso completo del file.
Nomi file multibyte
Il character_set_filesystem
La variabile di sistema viene utilizzata per controllare l'interpretazione dei nomi di file forniti come stringhe letterali. Viene utilizzato per convertire i nomi di file specificati come una stringa letterale da character_set_client
a character_set_filesystem
prima di aprire il file.
Per impostazione predefinita, character_set_filesystem
è impostato su binary
, quindi non avviene alcuna conversione.
Puoi controllare questo valore usando il seguente codice:
SELECT @@GLOBAL.character_set_filesystem;
Risultato:
+-----------------------------------+ | @@GLOBAL.character_set_filesystem | +-----------------------------------+ | binary | +-----------------------------------+
Percorso file nullo
Fornire un null
il percorso del file risulta null
:
SELECT LOAD_FILE(null);
Risultato:
+-----------------+ | LOAD_FILE(null) | +-----------------+ | NULL | +-----------------+ 1 row in set (0.000 sec)
Percorso file mancante
Se non viene fornito un percorso di file, viene visualizzato un errore:
SELECT LOAD_FILE();
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOAD_FILE'