sql >> Databáze >  >> RDS >> Mysql

Jak funguje funkce LOAD_FILE() v MySQL

V MySQL je to LOAD_FILE() funkce přečte soubor a vrátí jeho obsah jako řetězec.

Syntaxe

Syntaxe vypadá takto:

LOAD_FILE(file_name)

Kde file_name je úplná cesta k souboru.

Příklad

Zde je příklad, kdy vyberu obsah ze souboru:

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

Výsledek:

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

Příklad databáze

Zde je příklad toho, jak může vypadat dotaz při vkládání obsahu souboru do databáze:

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

V tomto případě sloupec MyBlobColumn má datový typ BLOB (což mu umožňuje ukládat binární data).

A teď, když je v databázi, můžeme ho vybrat:

SELECT MyBlobColumn
  FROM MyTable
  WHERE UserId = 20;

Výsledek:

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

Pokud soubor neexistuje

Pokud soubor neexistuje, NULL je vráceno:

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

Výsledek:

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

Další důvody, proč byste mohli získat NULL

Získáte také NULL není splněna jedna z následujících podmínek:

  • Soubor musí být umístěn na hostitelském serveru.
  • Musíte mít FILE oprávnění číst soubor. Uživatel, který má FILE privilegium může číst jakýkoli soubor na hostitelském serveru, který je buď světově čitelný nebo čitelný serverem MySQL.
  • Soubor musí být čitelný pro všechny a jeho velikost musí být menší než max_allowed_packet bajtů. Zde je návod, jak to zkontrolovat:
    SHOW VARIABLES LIKE 'max_allowed_packet';

    Můj výsledek:

    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | max_allowed_packet | 67108864 |
    +--------------------+----------+
  • Pokud secure_file_priv systémová proměnná je nastavena na neprázdný název adresáře, soubor, který má být načten, musí být umístěn v tomto adresáři. Zde je návod, jak to můžete zkontrolovat:
    SHOW VARIABLES LIKE 'secure_file_priv';

    Můj výsledek:

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

    V tomto příkladu mohu číst pouze soubory z /data/ adresář.


  1. Dopad definice sloupce VARCHAR2 s větší délkou

  2. Změňte a resetujte kořenové heslo MySQL

  3. Jak rozdělím oddělený řetězec na serveru SQL bez vytvoření funkce?

  4. Speciální znaky v názvu tabulky MySQL