MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Как работи LOAD_FILE() в MariaDB

В MariaDB, LOAD_FILE() функцията чете файл и връща съдържанието на файла като низ.

Синтаксис

Синтаксисът е така:

LOAD_FILE(file_name) 

Където file_name е пълното име на пътя към файла.

Пример

Да предположим, че имаме файл, наречен pets.csv който съдържа следния текст:

1,"Размахване","Куче"2,"Лаене","Куче"3,"Мяу","Котка"

Можем да използваме LOAD_FILE() функция за четене и връщане на това съдържание:

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

Резултат:

+----------------------------------------------------+ | LOAD_FILE('/Users/barney/data/pets.csv') |+--------------------------------- ------------+| 1,"Махкане","Куче"2,"Лаене","Куче"3,"Мяу","Котка" |+--------------------- ------------------------+1 ред в комплект (0,186 сек)

В този случай пълният път до файла е /Users/barney/data/pets.csv .

Грешен път към файла или привилегии

Предоставянето на път към файла, който не отговаря на следните критерии, води до null :

  • Файлът трябва да се намира на хоста на сървъра, трябва да посочите пълното име на пътя към файла и трябва да имате FILE привилегия.
  • Файлът трябва да бъде четим от всички и трябва да е по-малък от размера, в байтове, на max_allowed_packet системна променлива.
  • Ако secure_file_priv системната променлива е зададена на име на непразна директория, файлът, който ще се зареди, трябва да се намира в тази директория.

Ето как да проверите тези две системни променливи:

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

Резултат:

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

В моя случай нямам никакви директории, посочени в secure_file_priv системна променлива и моят max_allowed_packet променливата е зададена по подразбиране (което е повече от достатъчно за файла, който качих в предишния пример).

Ето какво се случва обаче, когато се опитам да кача файл, който не съществува:

SELECT LOAD_FILE('pets.csv'); 

Резултат:

<пред>+-----------------------+| LOAD_FILE('pets.csv') |+-----------------------+| NULL |+-----------------------+1 ред в комплект (0,000 сек)

В този случай забравих да посоча пълния път до файла.

Многобайтови имена на файлове

character_set_filesystem системната променлива се използва за контролиране на интерпретацията на имена на файлове, които са дадени като литерални низове. Използва се за конвертиране на имена на файлове, посочени като низов литерал от character_set_client към character_set_filesystem преди да отворите файла.

По подразбиране character_set_filesystem е настроен на binary , така че не се извършва преобразуване.

Можете да проверите тази стойност, като използвате следния код:

SELECT @@GLOBAL.character_set_filesystem; 

Резултат:

+---------------------------------+| @@GLOBAL.character_set_filesystem |+-----------------------------------+| двоичен |+----------------------------------+

Нулев път към файла

Предоставяне на null пътят към файла води до null :

SELECT LOAD_FILE(null); 

Резултат:

+-----------------+| LOAD_FILE(null) |+----------------+| NULL |+-----------------+1 ред в комплект (0,000 сек)

Липсващ път към файла

Неуспешното предоставяне на път към файла води до грешка:

SELECT LOAD_FILE(); 

Резултат:

ГРЕШКА 1582 (42000):Неправилен брой на параметрите в извикването на естествената функция „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. Миграция от Oracle Database към MariaDB - Дълбоко гмуркане

  2. Как да постигнем PCI съответствие за MySQL и MariaDB с ClusterControl - Повторението

  3. MariaDB JSON_MERGE_PRESERVE() Обяснено

  4. Върнете само числови стойности в MariaDB

  5. 3 начина да получите наличните съпоставяния в MariaDB