sql >> Database teknologi >  >> RDS >> Mysql

Sådan fungerer LOAD_FILE()-funktionen i MySQL

I MySQL er LOAD_FILE() funktionen læser en fil og returnerer dens indhold som en streng.

Syntaks

Syntaksen ser sådan ud:

LOAD_FILE(file_name)

Hvor file_name er den fulde sti til filen.

Eksempel

Her er et eksempel, hvor jeg vælger indholdet fra en fil:

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

Resultat:

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

Et databaseeksempel

Her er et eksempel på, hvordan en forespørgsel kan se ud, når du indsætter indholdet af filen i en database:

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

I dette tilfælde er kolonnen MyBlobColumn har en datatype BLOB (som gør det muligt at gemme binære data).

Og nu hvor det er i databasen, kan vi vælge det:

SELECT MyBlobColumn
  FROM MyTable
  WHERE UserId = 20;

Resultat:

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

Hvis filen ikke findes

Hvis filen ikke eksisterer, NULL returneres:

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

Resultat:

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

Flere grunde til, at du muligvis bliver NULL

Du får også NULL en af ​​følgende betingelser er ikke opfyldt:

  • Filen skal være placeret på serverværten.
  • Du skal have FILE privilegium for at læse filen. En bruger, der har FILE privilegium kan læse enhver fil på serverværten, der enten er verdenslæsbar eller læsbar af MySQL-serveren.
  • Filen skal kunne læses af alle og dens størrelse skal være mindre end max_allowed_packet bytes. Sådan kan du kontrollere, at:
    SHOW VARIABLES LIKE 'max_allowed_packet';

    Mit resultat:

    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | max_allowed_packet | 67108864 |
    +--------------------+----------+
  • Hvis secure_file_priv systemvariablen er indstillet til et ikke-tomt biblioteksnavn, den fil, der skal indlæses, skal være placeret i den mappe.Sådan kan du kontrollere, at:
    SHOW VARIABLES LIKE 'secure_file_priv';

    Mit resultat:

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

    I dette eksempel kan jeg kun læse filer fra /data/ bibliotek.


  1. SQL Natural Join

  2. Hjælp til MySQL-opdateringssag

  3. Hvordan UNDTAGET virker i SQL Server

  4. Rækkemål, del 2:Semi-joins