Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como a função LOAD_FILE() funciona no MySQL


No MySQL, o LOAD_FILE() A função lê um arquivo e retorna seu conteúdo como uma string.


Sintaxe


A sintaxe fica assim:
LOAD_FILE(file_name)

Onde file_name é o caminho completo para o arquivo.

Exemplo


Aqui está um exemplo em que seleciono o conteúdo de um arquivo:
SELECT LOAD_FILE('/data/test.txt') AS Result;

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

Um exemplo de banco de dados


Aqui está um exemplo da aparência de uma consulta ao inserir o conteúdo do arquivo em um banco de dados:
INSERT INTO MyTable (FileId, UserId, MyBlobColumn) 
VALUES (1, 20, LOAD_FILE('/data/test.txt'));

Neste caso, a coluna MyBlobColumn tem um tipo de dados BLOB (que permite armazenar dados binários).

E agora que está no banco de dados, podemos selecioná-lo:
SELECT MyBlobColumn
  FROM MyTable
  WHERE UserId = 20;

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

Se o arquivo não existir


Se o arquivo não existir, NULL é retornado:
SELECT LOAD_FILE('/data/oops.txt') AS Result;

Resultado:
+--------+
| Result |
+--------+
| NULL   |
+--------+

Mais razões pelas quais você pode obter NULL


Você também receberá NULL uma das seguintes condições não for atendida:
  • O arquivo deve estar localizado no host do servidor.
  • Você deve ter o FILE privilégio para ler o arquivo. Um usuário que tem o FILE privilégio pode ler qualquer arquivo no host do servidor que seja legível pelo mundo ou pelo servidor MySQL.
  • O arquivo deve ser legível por todos e seu tamanho deve ser menor que max_allowed_packet bytes. Veja como você pode verificar isso:
    SHOW VARIABLES LIKE 'max_allowed_packet';

    Meu resultado:
    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | max_allowed_packet | 67108864 |
    +--------------------+----------+
  • Se o secure_file_priv A variável de sistema é definida como um nome de diretório não vazio, o arquivo a ser carregado deve estar localizado nesse diretório. Veja como você pode verificar isso:
    SHOW VARIABLES LIKE 'secure_file_priv';

    Meu resultado:
    +------------------+--------+
    | Variable_name    | Value  |
    +------------------+--------+
    | secure_file_priv | /data/ |
    +------------------+--------+

    Neste exemplo, só posso ler arquivos do arquivo /data/ diretório.