MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak LOAD_FILE() działa w MariaDB

W MariaDB funkcja LOAD_FILE() funkcja odczytuje plik i zwraca zawartość pliku jako ciąg.

Składnia

Składnia wygląda tak:

LOAD_FILE(file_name)

Gdzie file_name to pełna ścieżka do pliku.

Przykład

Załóżmy, że mamy plik o nazwie pets.csv który zawiera następujący tekst:

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

Możemy użyć LOAD_FILE() funkcja odczytywania i zwracania tych treści:

SELECT LOAD_FILE('/Users/barney/data/pets.csv');

Wynik:

+---------------------------------------------+
| LOAD_FILE('/Users/barney/data/pets.csv')    |
+---------------------------------------------+
| 1,"Wag","Dog"
2,"Bark","Dog"
3,"Meow","Cat" |
+---------------------------------------------+
1 row in set (0.186 sec)

W tym przypadku pełna ścieżka do pliku to /Users/barney/data/pets.csv .

Niewłaściwa ścieżka do pliku lub uprawnienia

Dostarczenie ścieżki do pliku, która nie spełnia poniższych kryteriów, daje w wyniku null :

  • Plik musi znajdować się na hoście serwera, musisz określić pełną ścieżkę do pliku i musisz mieć FILE przywilej.
  • Plik musi być czytelny dla wszystkich i musi być mniejszy niż rozmiar w bajtach max_allowed_packet zmienna systemowa.
  • Jeśli secure_file_priv zmienna systemowa jest ustawiona na niepustą nazwę katalogu, plik do załadowania musi znajdować się w tym katalogu.

Oto jak sprawdzić te dwie zmienne systemowe:

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

Wynik:

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

W moim przypadku nie mam żadnych katalogów określonych w secure_file_priv zmienna systemowa i mój max_allowed_packet zmienna jest ustawiona domyślnie (co jest więcej niż wystarczające dla pliku, który przesłałem w poprzednim przykładzie).

Oto jednak, co się dzieje, gdy próbuję przesłać plik, który nie istnieje:

SELECT LOAD_FILE('pets.csv');

Wynik:

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

W tym przypadku zapomniałem podać pełną ścieżkę do pliku.

Wielobajtowe nazwy plików

character_set_filesystem zmienna systemowa służy do kontrolowania interpretacji nazw plików, które są podawane jako łańcuchy literowe. Służy do konwertowania nazw plików określonych jako literał ciągu z character_set_client do character_set_filesystem przed otwarciem pliku.

Domyślnie character_set_filesystem jest ustawiony na binary , więc nie następuje konwersja.

Możesz sprawdzić tę wartość za pomocą następującego kodu:

SELECT @@GLOBAL.character_set_filesystem;

Wynik:

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

Zerowa ścieżka do pliku

Zapewnienie null ścieżka pliku daje w wyniku null :

SELECT LOAD_FILE(null);

Wynik:

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

Brak ścieżki do pliku

Niepodanie ścieżki do pliku skutkuje błędem:

SELECT LOAD_FILE();

Wynik:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak CHR() działa w MariaDB

  2. Jak NIE PODOBA działa w MariaDB

  3. MariaDB JSON_ARRAYAGG() Objaśnienie

  4. Jak uruchomić POKAŻ LOKALIZACJE w MariaDB

  5. Jak TRIM_ORACLE() działa w MariaDB