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ć
FILEprzywilej. - Plik musi być czytelny dla wszystkich i musi być mniejszy niż rozmiar w bajtach
max_allowed_packetzmienna systemowa. - Jeśli
secure_file_privzmienna 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'