Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Funktionsweise der LOAD_FILE()-Funktion in MySQL

In MySQL die LOAD_FILE() Funktion liest eine Datei und gibt ihren Inhalt als String zurück.

Syntax

Die Syntax lautet wie folgt:

LOAD_FILE(file_name)

Wobei file_name ist der vollständige Pfad zur Datei.

Beispiel

Hier ist ein Beispiel, wo ich den Inhalt aus einer Datei auswähle:

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

Ergebnis:

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

Ein Datenbankbeispiel

Hier ist ein Beispiel dafür, wie eine Abfrage aussehen könnte, wenn der Inhalt der Datei in eine Datenbank eingefügt wird:

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

In diesem Fall die Spalte MyBlobColumn hat den Datentyp BLOB (was es ermöglicht, binäre Daten zu speichern).

Und jetzt, da es in der Datenbank ist, können wir es auswählen:

SELECT MyBlobColumn
  FROM MyTable
  WHERE UserId = 20;

Ergebnis:

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

Wenn die Datei nicht existiert

Wenn die Datei nicht existiert, NULL wird zurückgegeben:

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

Ergebnis:

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

Weitere Gründe, warum Sie NULL erhalten könnten

Sie erhalten auch NULL eine der folgenden Bedingungen ist nicht erfüllt:

  • Die Datei muss sich auf dem Serverhost befinden.
  • Sie müssen die FILE haben Privileg, um die Datei zu lesen. Ein Benutzer, der die FILE hat kann jede Datei auf dem Server-Host lesen, die entweder allgemein oder vom MySQL-Server gelesen werden kann.
  • Die Datei muss für alle lesbar und kleiner als max_allowed_packet sein Bytes. So können Sie das überprüfen:
    SHOW VARIABLES LIKE 'max_allowed_packet';

    Mein Ergebnis:

    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | max_allowed_packet | 67108864 |
    +--------------------+----------+
  • Falls der secure_file_priv Systemvariable auf einen nicht leeren Verzeichnisnamen gesetzt ist, muss sich die zu ladende Datei in diesem Verzeichnis befinden. So können Sie das überprüfen:
    SHOW VARIABLES LIKE 'secure_file_priv';

    Mein Ergebnis:

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

    In diesem Beispiel kann ich nur Dateien aus /data/ lesen Verzeichnis.