Mysql
 sql >> Database >  >> RDS >> Mysql

Come funziona la funzione LOAD_FILE() in MySQL

In MySQL, il LOAD_FILE() la funzione legge un file e ne restituisce il contenuto come stringa.

Sintassi

La sintassi è questa:

LOAD_FILE(file_name)

Dove file_name è il percorso completo del file.

Esempio

Ecco un esempio in cui seleziono i contenuti da un file:

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

Risultato:

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

Un esempio di database

Ecco un esempio di come potrebbe apparire una query quando si inserisce il contenuto del file in un database:

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

In questo caso, la colonna MyBlobColumn ha un tipo di dati BLOB (che gli consente di memorizzare dati binari).

E ora che è nel database, possiamo selezionarlo:

SELECT MyBlobColumn
  FROM MyTable
  WHERE UserId = 20;

Risultato:

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

Se il file non esiste

Se il file non esiste, NULL viene restituito:

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

Risultato:

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

Altri motivi per cui potresti diventare NULL

Riceverai anche NULL una delle seguenti condizioni non è soddisfatta:

  • Il file deve trovarsi sull'host del server.
  • Devi avere il FILE privilegio per leggere il file. Un utente che ha il FILE privilegio può leggere qualsiasi file sull'host del server che sia leggibile dal mondo intero o leggibile dal server MySQL.
  • Il file deve essere leggibile da tutti e di dimensioni inferiori a max_allowed_packet byte. Ecco come puoi verificarlo:
    SHOW VARIABLES LIKE 'max_allowed_packet';

    Il mio risultato:

    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | max_allowed_packet | 67108864 |
    +--------------------+----------+
  • 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 puoi verificare che:
    SHOW VARIABLES LIKE 'secure_file_priv';

    Il mio risultato:

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

    In questo esempio, posso solo leggere i file da /data/ directory.