Mysql
 sql >> Base de données >  >> RDS >> Mysql

Fonctionnement de la fonction LOAD_FILE() dans MySQL

Dans MySQL, le LOAD_FILE() la fonction lit un fichier et renvoie son contenu sous forme de chaîne.

Syntaxe

La syntaxe ressemble à ceci :

LOAD_FILE(file_name)

file_name est le chemin d'accès complet au fichier.

Exemple

Voici un exemple où je sélectionne le contenu d'un fichier :

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

Résultat :

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

Un exemple de base de données

Voici un exemple de ce à quoi pourrait ressembler une requête lors de l'insertion du contenu du fichier dans une base de données :

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

Dans ce cas, la colonne MyBlobColumn a un type de données BLOB (ce qui lui permet de stocker des données binaires).

Et maintenant qu'il est dans la base de données, nous pouvons le sélectionner :

SELECT MyBlobColumn
  FROM MyTable
  WHERE UserId = 20;

Résultat :

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

Si le fichier n'existe pas

Si le fichier n'existe pas, NULL est renvoyé :

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

Résultat :

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

Plus de raisons pour lesquelles vous pourriez obtenir NULL

Vous obtiendrez également NULL l'une des conditions suivantes n'est pas remplie :

  • Le fichier doit être situé sur l'hôte du serveur.
  • Vous devez avoir le FILE privilège pour lire le fichier. Un utilisateur qui a le FILE privilège peut lire n'importe quel fichier sur l'hôte du serveur qui est soit lisible par tout le monde, soit lisible par le serveur MySQL.
  • Le fichier doit être lisible par tous et sa taille inférieure à max_allowed_packet octets. Voici comment vous pouvez vérifier cela :
    SHOW VARIABLES LIKE 'max_allowed_packet';

    Mon résultat :

    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | max_allowed_packet | 67108864 |
    +--------------------+----------+
  • Si le secure_file_priv variable système est définie sur un nom de répertoire non vide, le fichier à charger doit se trouver dans ce répertoire.Voici comment vous pouvez vérifier que :
    SHOW VARIABLES LIKE 'secure_file_priv';

    Mon résultat :

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

    Dans cet exemple, je ne peux lire que les fichiers de /data/ répertoire.