sql >> Database teknologi >  >> RDS >> MariaDB

Sådan fungerer LOAD_FILE() i MariaDB

I MariaDB er LOAD_FILE() funktionen læser en fil og returnerer filindholdet som en streng.

Syntaks

Syntaksen ser sådan ud:

LOAD_FILE(file_name)

Hvor file_name er det fulde stinavn til filen.

Eksempel

Antag, at vi har en fil kaldet pets.csv der indeholder følgende tekst:

1,"Wag","Dog"
2,"Bark","Dog"
3,"Meow","Cat"

Vi kan bruge LOAD_FILE() funktion til at læse og returnere dette indhold:

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 dette tilfælde er den fulde sti til filen /Users/barney/data/pets.csv .

Forkert filsti eller privilegier

Angivelse af en filsti, der ikke opfylder følgende kriterier, resulterer i null :

  • Filen skal være placeret på serverværten, du skal angive det fulde stinavn til filen, og du skal have FILE privilegium.
  • Filen skal kunne læses af alle, og den skal være mindre end størrelsen i bytes af max_allowed_packet systemvariabel.
  • Hvis secure_file_priv systemvariablen er indstillet til et ikke-tomt biblioteksnavn, skal filen, der skal indlæses, være placeret i den mappe.

Sådan tjekker du disse to systemvariabler:

SELECT
    @@GLOBAL.secure_file_priv,
    @@GLOBAL.max_allowed_packet;

Resultat:

+---------------------------+-----------------------------+
| @@GLOBAL.secure_file_priv | @@GLOBAL.max_allowed_packet |
+---------------------------+-----------------------------+
| NULL                      |                    16777216 |
+---------------------------+-----------------------------+

I mit tilfælde har jeg ingen mapper angivet i secure_file_priv systemvariabel og min max_allowed_packet variabel er sat som standard (hvilket er mere end nok til den fil, jeg uploadede i det forrige eksempel).

Men her er hvad der sker, når jeg prøver at uploade en fil, der ikke eksisterer:

SELECT LOAD_FILE('pets.csv');

Resultat:

+-----------------------+
| LOAD_FILE('pets.csv') |
+-----------------------+
| NULL                  |
+-----------------------+
1 row in set (0.000 sec)

I dette tilfælde glemte jeg at angive den fulde sti til filen.

Multi-Byte filnavne

character_set_filesystem systemvariabel bruges til at kontrollere fortolkning af filnavne, der er angivet som bogstavelige strenge. Det bruges til at konvertere filnavne angivet som en streng-literal fra character_set_client til character_set_filesystem før du åbner filen.

Som standard er character_set_filesystem er indstillet til binary , så ingen konvertering finder sted.

Du kan kontrollere denne værdi ved hjælp af følgende kode:

SELECT @@GLOBAL.character_set_filesystem;

Resultat:

+-----------------------------------+
| @@GLOBAL.character_set_filesystem |
+-----------------------------------+
| binary                            |
+-----------------------------------+

Nulfilsti

Angivelse af en null filstien resulterer i null :

SELECT LOAD_FILE(null);

Resultat:

+-----------------+
| LOAD_FILE(null) |
+-----------------+
| NULL            |
+-----------------+
1 row in set (0.000 sec)

Manglende filsti

Undladelse af at angive en filsti resulterer i en fejl:

SELECT LOAD_FILE();

Resultat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOAD_FILE'


  1. Sådan ændres lokalitet, når du formaterer tal i PostgreSQL

  2. Metoder til indstilling af NLS-parametre og deres prioriteter (Oracle-database)

  3. Hvordan kan jeg manipulere MySQL fuldtekst søgerelevans for at gøre et felt mere 'værdifuldt' end et andet?

  4. Sådan installeres og konfigureres phpMyAdmin på Debian 8