In MariaDB, de LOAD_FILE()
functie leest een bestand en retourneert de inhoud van het bestand als een tekenreeks.
Syntaxis
De syntaxis gaat als volgt:
LOAD_FILE(file_name)
Waar file_name
is de volledige padnaam naar het bestand.
Voorbeeld
Stel dat we een bestand hebben met de naam pets.csv
die de volgende tekst bevat:
1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat"
We kunnen de LOAD_FILE()
. gebruiken functie om die inhoud te lezen en terug te sturen:
SELECT LOAD_FILE('/Users/barney/data/pets.csv');
Resultaat:
+---------------------------------------------+ | LOAD_FILE('/Users/barney/data/pets.csv') | +---------------------------------------------+ | 1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat" | +---------------------------------------------+ 1 row in set (0.186 sec)
In dit geval is het volledige pad naar het bestand /Users/barney/data/pets.csv
.
Verkeerd bestandspad of rechten
Het verstrekken van een bestandspad dat niet aan de volgende criteria voldoet, resulteert in null
:
- Het bestand moet zich op de serverhost bevinden, u moet de volledige padnaam naar het bestand opgeven en u moet de
FILE
hebben voorrecht. - Het bestand moet voor iedereen leesbaar zijn en het moet kleiner zijn dan de grootte, in bytes, van het
max_allowed_packet
systeem variabele. - Als de
secure_file_priv
systeemvariabele is ingesteld op een niet-lege mapnaam, moet het te laden bestand zich in die map bevinden.
Zo controleert u die twee systeemvariabelen:
SELECT
@@GLOBAL.secure_file_priv,
@@GLOBAL.max_allowed_packet;
Resultaat:
+---------------------------+-----------------------------+ | @@GLOBAL.secure_file_priv | @@GLOBAL.max_allowed_packet | +---------------------------+-----------------------------+ | NULL | 16777216 | +---------------------------+-----------------------------+
In mijn geval heb ik geen mappen gespecificeerd in de secure_file_priv
systeemvariabele, en mijn max_allowed_packet
variabele is standaard ingesteld (wat meer dan genoeg is voor het bestand dat ik in het vorige voorbeeld heb geüpload).
Dit is echter wat er gebeurt als ik een bestand probeer te uploaden dat niet bestaat:
SELECT LOAD_FILE('pets.csv');
Resultaat:
+-----------------------+ | LOAD_FILE('pets.csv') | +-----------------------+ | NULL | +-----------------------+ 1 row in set (0.000 sec)
In dit geval ben ik vergeten het volledige pad naar het bestand op te geven.
Multi-Byte bestandsnamen
Het character_set_filesystem
systeemvariabele wordt gebruikt om de interpretatie te regelen van bestandsnamen die als letterlijke tekenreeksen worden gegeven. Het wordt gebruikt voor het converteren van bestandsnamen die zijn opgegeven als een letterlijke tekenreeks van character_set_client
naar character_set_filesystem
voordat u het bestand opent.
Standaard character_set_filesystem
is ingesteld op binary
, dus er vindt geen conversie plaats.
U kunt deze waarde controleren met de volgende code:
SELECT @@GLOBAL.character_set_filesystem;
Resultaat:
+-----------------------------------+ | @@GLOBAL.character_set_filesystem | +-----------------------------------+ | binary | +-----------------------------------+
Null-bestandspad
Het verstrekken van een null
bestandspad resulteert in null
:
SELECT LOAD_FILE(null);
Resultaat:
+-----------------+ | LOAD_FILE(null) | +-----------------+ | NULL | +-----------------+ 1 row in set (0.000 sec)
Ontbrekend bestandspad
Het niet opgeven van een bestandspad resulteert in een fout:
SELECT LOAD_FILE();
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOAD_FILE'