I MariaDB, LOAD_FILE()
funktionen läser en fil och returnerar filinnehållet som en sträng.
Syntax
Syntaxen ser ut så här:
LOAD_FILE(file_name)
Där file_name
är det fullständiga sökvägsnamnet till filen.
Exempel
Anta att vi har en fil som heter pets.csv
som innehåller följande text:
1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat"
Vi kan använda LOAD_FILE()
funktion för att läsa och returnera detta innehåll:
SELECT LOAD_FILE('/Users/barney/data/pets.csv');
Resultat:
+---------------------------------------------+ | LOAD_FILE('/Users/barney/data/pets.csv') | +---------------------------------------------+ | 1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat" | +---------------------------------------------+ 1 row in set (0.186 sec)
I det här fallet är den fullständiga sökvägen till filen /Users/barney/data/pets.csv
.
Fel sökväg eller behörigheter
Att tillhandahålla en filsökväg som inte uppfyller följande kriterier resulterar i null
:
- Filen måste finnas på servervärden, du måste ange hela sökvägsnamnet till filen och du måste ha
FILE
privilegium. - Filen måste vara läsbar av alla och den måste vara mindre än storleken, i byte, av
max_allowed_packet
systemvariabel. - Om
secure_file_priv
systemvariabeln är inställd på ett icke-tomt katalognamn, filen som ska laddas måste finnas i den katalogen.
Så här kontrollerar du dessa två systemvariabler:
SELECT
@@GLOBAL.secure_file_priv,
@@GLOBAL.max_allowed_packet;
Resultat:
+---------------------------+-----------------------------+ | @@GLOBAL.secure_file_priv | @@GLOBAL.max_allowed_packet | +---------------------------+-----------------------------+ | NULL | 16777216 | +---------------------------+-----------------------------+
I mitt fall har jag inga kataloger specificerade i secure_file_priv
systemvariabel och mitt max_allowed_packet
variabeln är inställd som standard (vilket är mer än tillräckligt för filen jag laddade upp i föregående exempel).
Men det här är vad som händer när jag försöker ladda upp en fil som inte finns:
SELECT LOAD_FILE('pets.csv');
Resultat:
+-----------------------+ | LOAD_FILE('pets.csv') | +-----------------------+ | NULL | +-----------------------+ 1 row in set (0.000 sec)
I det här fallet glömde jag att ange hela sökvägen till filen.
Multi-Byte filnamn
character_set_filesystem
systemvariabel används för att styra tolkningen av filnamn som ges som bokstavliga strängar. Den används för att konvertera filnamn som anges som en strängliteral från character_set_client
till character_set_filesystem
innan du öppnar filen.
Som standard är character_set_filesystem
är inställd på binary
, så ingen konvertering sker.
Du kan kontrollera detta värde med hjälp av följande kod:
SELECT @@GLOBAL.character_set_filesystem;
Resultat:
+-----------------------------------+ | @@GLOBAL.character_set_filesystem | +-----------------------------------+ | binary | +-----------------------------------+
Nullfilsökväg
Ange en null
filsökväg resulterar i null
:
SELECT LOAD_FILE(null);
Resultat:
+-----------------+ | LOAD_FILE(null) | +-----------------+ | NULL | +-----------------+ 1 row in set (0.000 sec)
Filsökväg saknas
Att inte ange en sökväg resulterar i ett fel:
SELECT LOAD_FILE();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOAD_FILE'