MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Cách LOAD_FILE () hoạt động trong MariaDB

Trong MariaDB, LOAD_FILE() hàm đọc một tệp và trả về nội dung tệp dưới dạng một chuỗi.

Cú pháp

Cú pháp như sau:

LOAD_FILE(file_name)

Ở đâu file_name là tên đường dẫn đầy đủ đến tệp.

Ví dụ

Giả sử chúng ta có một tệp có tên là pets.csv chứa văn bản sau:

1,"Wag","Dog"
2,"Bark","Dog"
3,"Meow","Cat"

Chúng ta có thể sử dụng LOAD_FILE() chức năng đọc và trả về những nội dung đó:

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

Kết quả:

+---------------------------------------------+
| LOAD_FILE('/Users/barney/data/pets.csv')    |
+---------------------------------------------+
| 1,"Wag","Dog"
2,"Bark","Dog"
3,"Meow","Cat" |
+---------------------------------------------+
1 row in set (0.186 sec)

Trong trường hợp này, đường dẫn đầy đủ đến tệp là /Users/barney/data/pets.csv .

Đường dẫn tệp hoặc đặc quyền sai

Việc cung cấp đường dẫn tệp không đáp ứng các tiêu chí sau dẫn đến null :

  • Tệp phải được đặt trên máy chủ lưu trữ, bạn phải chỉ định tên đường dẫn đầy đủ đến tệp và bạn phải có FILE đặc ân.
  • Tất cả mọi người đều phải đọc được tệp và phải nhỏ hơn kích thước, tính bằng byte, của max_allowed_packet biến hệ thống.
  • Nếu secure_file_priv biến hệ thống được đặt thành tên thư mục không trống, tệp được tải phải nằm trong thư mục đó.

Dưới đây là cách kiểm tra hai biến hệ thống đó:

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

Kết quả:

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

Trong trường hợp của tôi, tôi không có bất kỳ thư mục nào được chỉ định trong secure_file_priv biến hệ thống và max_allowed_packet của tôi biến được đặt ở chế độ mặc định (quá đủ cho tệp tôi đã tải lên trong ví dụ trước).

Tuy nhiên, đây là những gì sẽ xảy ra khi tôi cố gắng tải lên một tệp không tồn tại:

SELECT LOAD_FILE('pets.csv');

Kết quả:

+-----------------------+
| LOAD_FILE('pets.csv') |
+-----------------------+
| NULL                  |
+-----------------------+
1 row in set (0.000 sec)

Trong trường hợp này, tôi đã quên chỉ định đường dẫn đầy đủ đến tệp.

Tên tệp nhiều byte

character_set_filesystem biến hệ thống được sử dụng để kiểm soát việc diễn giải tên tệp được cung cấp dưới dạng chuỗi ký tự. Nó được sử dụng để chuyển đổi tên tệp được chỉ định dưới dạng chuỗi ký tự từ character_set_client thành character_set_filesystem trước khi mở tệp.

Theo mặc định, character_set_filesystem được đặt thành binary , vì vậy không có chuyển đổi nào diễn ra.

Bạn có thể kiểm tra giá trị này bằng cách sử dụng mã sau:

SELECT @@GLOBAL.character_set_filesystem;

Kết quả:

+-----------------------------------+
| @@GLOBAL.character_set_filesystem |
+-----------------------------------+
| binary                            |
+-----------------------------------+

Đường dẫn tệp rỗng

Cung cấp null đường dẫn tệp dẫn đến null :

SELECT LOAD_FILE(null);

Kết quả:

+-----------------+
| LOAD_FILE(null) |
+-----------------+
| NULL            |
+-----------------+
1 row in set (0.000 sec)

Thiếu đường dẫn tệp

Không cung cấp đường dẫn tệp dẫn đến lỗi:

SELECT LOAD_FILE();

Kết quả:

ERROR 1582 (42000): Incorrect parameter count in the call to native function '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. 4 cách để lấy đối chiếu cơ sở dữ liệu trong MariaDB

  2. Cách thiết lập sao chép không đồng bộ giữa các cụm MySQL Galera

  3. 8 cách để thêm một giờ vào một ngày trong MariaDB

  4. Cách YEARWEEK () hoạt động trong MariaDB

  5. 5 chức năng để trích xuất số tuần từ một ngày trong MariaDB