sql >> Database >  >> RDS >> Mysql

Hoe de LOAD_FILE()-functie werkt in MySQL

In MySQL is de LOAD_FILE() functie leest een bestand en retourneert de inhoud als een tekenreeks.

Syntaxis

De syntaxis gaat als volgt:

LOAD_FILE(file_name)

Waar file_name is het volledige pad naar het bestand.

Voorbeeld

Hier is een voorbeeld waarin ik de inhoud van een bestand selecteer:

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

Resultaat:

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

Een databasevoorbeeld

Hier is een voorbeeld van hoe een query eruit zou kunnen zien wanneer de inhoud van het bestand in een database wordt ingevoegd:

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

In dit geval is de kolom MyBlobColumn heeft het gegevenstype BLOB (waardoor het binaire gegevens kan opslaan).

En nu het in de database staat, kunnen we het selecteren:

SELECT MyBlobColumn
  FROM MyTable
  WHERE UserId = 20;

Resultaat:

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

Als het bestand niet bestaat

Als het bestand niet bestaat, NULL wordt geretourneerd:

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

Resultaat:

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

Meer redenen waarom je NULL zou kunnen krijgen

Je krijgt ook NULL aan een van de volgende voorwaarden is niet voldaan:

  • Het bestand moet zich op de serverhost bevinden.
  • U moet het FILE . hebben privilege om het bestand te lezen. Een gebruiker die de FILE . heeft privilege kan elk bestand op de serverhost lezen dat voor de hele wereld leesbaar is of leesbaar is voor de MySQL-server.
  • Het bestand moet voor iedereen leesbaar zijn en moet kleiner zijn dan max_allowed_packet bytes. U kunt dat als volgt controleren:
    SHOW VARIABLES LIKE 'max_allowed_packet';

    Mijn resultaat:

    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | max_allowed_packet | 67108864 |
    +--------------------+----------+
  • Als de secure_file_priv systeemvariabele is ingesteld op een niet-lege mapnaam, moet het te laden bestand zich in die map bevinden. Zo kunt u dat controleren:
    SHOW VARIABLES LIKE 'secure_file_priv';

    Mijn resultaat:

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

    In dit voorbeeld kan ik alleen bestanden lezen van de /data/ directory.


  1. ORA-00947 Niet genoeg waarden bij het globaal declareren van het type

  2. Hoe vaak moet u een back-up maken van uw databases?

  3. CLEAR SCREEN - Oracle SQL Developer snelkoppeling?

  4. Hoe het mysql root-wachtwoord te wijzigen?