sql >> Databasteknik >  >> RDS >> Mysql

Hur LOAD_FILE()-funktionen fungerar i MySQL

I MySQL, LOAD_FILE() funktionen läser en fil och returnerar dess innehåll som en sträng.

Syntax

Syntaxen ser ut så här:

LOAD_FILE(file_name)

Där file_name är den fullständiga sökvägen till filen.

Exempel

Här är ett exempel där jag väljer innehållet från en fil:

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

Resultat:

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

Ett databasexempel

Här är ett exempel på hur en fråga kan se ut när du infogar innehållet i filen i en databas:

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

I det här fallet, kolumnen MyBlobColumn har datatypen BLOB (som gör att den kan lagra binär data).

Och nu när den finns i databasen kan vi välja den:

SELECT MyBlobColumn
  FROM MyTable
  WHERE UserId = 20;

Resultat:

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

Om filen inte finns

Om filen inte finns, NULL returneras:

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

Resultat:

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

Fler anledningar till att du kan få NULL

Du får också NULL ett av följande villkor är inte uppfyllt:

  • Filen måste finnas på servervärden.
  • Du måste ha FILE behörighet för att läsa filen. En användare som har FILE privilegium kan läsa vilken fil som helst på servervärden som antingen är världsläsbar eller läsbar av MySQL-servern.
  • Filen måste vara läsbar för alla och dess storlek är mindre än max_allowed_packet bytes. Så här kan du kontrollera att:
    SHOW VARIABLES LIKE 'max_allowed_packet';

    Mitt resultat:

    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | max_allowed_packet | 67108864 |
    +--------------------+----------+
  • 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 kan du kontrollera att:
    SHOW VARIABLES LIKE 'secure_file_priv';

    Mitt resultat:

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

    I det här exemplet kan jag bara läsa filer från /data/ katalog.


  1. Kan jag lagra bilder i MySQL

  2. Vad är en databas? Och en DBMS?

  3. Giltiga modifierare för SQLites datum/tid-funktioner

  4. Schemamönstersökning till dataklassförening