In MariaDB die LOAD_FILE()
liest eine Datei und gibt den Dateiinhalt als String zurück.
Syntax
Die Syntax sieht so aus:
LOAD_FILE(file_name)
Wobei file_name
ist der vollständige Pfadname zur Datei.
Beispiel
Angenommen, wir haben eine Datei namens pets.csv
das den folgenden Text enthält:
1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat"
Wir können das LOAD_FILE()
verwenden Funktion zum Lesen und Zurückgeben dieser Inhalte:
SELECT LOAD_FILE('/Users/barney/data/pets.csv');
Ergebnis:
+---------------------------------------------+ | LOAD_FILE('/Users/barney/data/pets.csv') | +---------------------------------------------+ | 1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat" | +---------------------------------------------+ 1 row in set (0.186 sec)
In diesem Fall lautet der vollständige Pfad zur Datei /Users/barney/data/pets.csv
.
Falscher Dateipfad oder falsche Berechtigungen
Die Angabe eines Dateipfads, der die folgenden Kriterien nicht erfüllt, führt zu null
:
- Die Datei muss sich auf dem Serverhost befinden, Sie müssen den vollständigen Pfadnamen zur Datei angeben und Sie müssen die
FILE
haben Privileg. - Die Datei muss für alle lesbar sein und kleiner als die Größe des
max_allowed_packet
in Bytes sein Systemvariable. - Falls der
secure_file_priv
Systemvariable auf einen nicht leeren Verzeichnisnamen gesetzt ist, muss sich die zu ladende Datei in diesem Verzeichnis befinden.
So prüfen Sie diese beiden Systemvariablen:
SELECT
@@GLOBAL.secure_file_priv,
@@GLOBAL.max_allowed_packet;
Ergebnis:
+---------------------------+-----------------------------+ | @@GLOBAL.secure_file_priv | @@GLOBAL.max_allowed_packet | +---------------------------+-----------------------------+ | NULL | 16777216 | +---------------------------+-----------------------------+
In meinem Fall habe ich keine Verzeichnisse in secure_file_priv
angegeben Systemvariable und mein max_allowed_packet
Die Variable ist auf ihren Standardwert gesetzt (was für die Datei, die ich im vorherigen Beispiel hochgeladen habe, mehr als genug ist).
Folgendes passiert jedoch, wenn ich versuche, eine Datei hochzuladen, die nicht existiert:
SELECT LOAD_FILE('pets.csv');
Ergebnis:
+-----------------------+ | LOAD_FILE('pets.csv') | +-----------------------+ | NULL | +-----------------------+ 1 row in set (0.000 sec)
In diesem Fall habe ich vergessen, den vollständigen Pfad zur Datei anzugeben.
Multibyte-Dateinamen
Das character_set_filesystem
Die Systemvariable wird verwendet, um die Interpretation von Dateinamen zu steuern, die als wörtliche Zeichenfolgen angegeben werden. Es wird zum Konvertieren von Dateinamen verwendet, die als String-Literal von character_set_client
angegeben sind zu character_set_filesystem
bevor Sie die Datei öffnen.
Standardmäßig character_set_filesystem
auf binary
gesetzt ist , sodass keine Konvertierung stattfindet.
Sie können diesen Wert mit dem folgenden Code überprüfen:
SELECT @@GLOBAL.character_set_filesystem;
Ergebnis:
+-----------------------------------+ | @@GLOBAL.character_set_filesystem | +-----------------------------------+ | binary | +-----------------------------------+
Kein Dateipfad
Bereitstellen eines null
Dateipfad ergibt null
:
SELECT LOAD_FILE(null);
Ergebnis:
+-----------------+ | LOAD_FILE(null) | +-----------------+ | NULL | +-----------------+ 1 row in set (0.000 sec)
Fehlender Dateipfad
Wenn Sie keinen Dateipfad angeben, wird ein Fehler ausgegeben:
SELECT LOAD_FILE();
Ergebnis:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOAD_FILE'