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
FILEprivilégio. - O arquivo deve ser legível por todos e deve ser menor que o tamanho, em bytes, do
max_allowed_packetvariável do sistema. - Se o
secure_file_privvariá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'