No MariaDB, o
LOAD_FILE()
A função lê um arquivo e retorna o conteúdo do arquivo como uma string. Sintaxe
A sintaxe fica assim:
LOAD_FILE(file_name)
Onde
file_name
é o nome completo do caminho para o arquivo. Exemplo
Suponha que temos um arquivo chamado
pets.csv
que contém o seguinte texto:1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat"
Podemos usar o
LOAD_FILE()
função para ler e retornar esses conteúdos:SELECT LOAD_FILE('/Users/barney/data/pets.csv');
Resultado:
+---------------------------------------------+ | LOAD_FILE('/Users/barney/data/pets.csv') | +---------------------------------------------+ | 1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat" | +---------------------------------------------+ 1 row in set (0.186 sec)
Neste caso, o caminho completo para o arquivo é
/Users/barney/data/pets.csv
. Caminho de arquivo ou privilégios incorretos
Fornecer um caminho de arquivo que não atende aos critérios a seguir resulta em
null
:- O arquivo deve estar localizado no host do servidor, você deve especificar o nome completo do caminho para o arquivo e deve ter o
FILE
privilégio. - O arquivo deve ser legível por todos e deve ser menor que o tamanho, em bytes, do
max_allowed_packet
variável do sistema. - Se o
secure_file_priv
variável do sistema estiver definida para um nome de diretório não vazio, o arquivo a ser carregado deve estar localizado nesse diretório.
Veja como verificar essas duas variáveis do sistema:
SELECT
@@GLOBAL.secure_file_priv,
@@GLOBAL.max_allowed_packet;
Resultado:
+---------------------------+-----------------------------+ | @@GLOBAL.secure_file_priv | @@GLOBAL.max_allowed_packet | +---------------------------+-----------------------------+ | NULL | 16777216 | +---------------------------+-----------------------------+
No meu caso, não tenho nenhum diretório especificado no
secure_file_priv
variável de sistema e meu max_allowed_packet
variável está definida em seu padrão (o que é mais que suficiente para o arquivo que carreguei no exemplo anterior). No entanto, eis o que acontece quando tento fazer upload de um arquivo que não existe:
SELECT LOAD_FILE('pets.csv');
Resultado:
+-----------------------+ | LOAD_FILE('pets.csv') | +-----------------------+ | NULL | +-----------------------+ 1 row in set (0.000 sec)
Nesse caso, esqueci de especificar o caminho completo para o arquivo.
Nomes de arquivos de vários bytes
O
character_set_filesystem
variável de sistema é usada para controlar a interpretação de nomes de arquivos que são fornecidos como strings literais. É usado para converter nomes de arquivos especificados como uma string literal de character_set_client
para character_set_filesystem
antes de abrir o arquivo. Por padrão,
character_set_filesystem
está definido como binary
, portanto, nenhuma conversão ocorre. Você pode verificar esse valor usando o seguinte código:
SELECT @@GLOBAL.character_set_filesystem;
Resultado:
+-----------------------------------+ | @@GLOBAL.character_set_filesystem | +-----------------------------------+ | binary | +-----------------------------------+
Caminho do arquivo nulo
Fornecendo um
null
o caminho do arquivo resulta em null
:SELECT LOAD_FILE(null);
Resultado:
+-----------------+ | LOAD_FILE(null) | +-----------------+ | NULL | +-----------------+ 1 row in set (0.000 sec)
Caminho do arquivo ausente
A falha em fornecer um caminho de arquivo resulta em um erro:
SELECT LOAD_FILE();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOAD_FILE'