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

Cách hàm LOAD_FILE () hoạt động trong MySQL

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

Cú pháp

Cú pháp như sau:

LOAD_FILE(file_name)

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

Ví dụ

Dưới đây là một ví dụ mà tôi chọn nội dung từ một tệp:

SELECT LOAD_FILE('/data/test.txt') AS Result;

Kết quả:

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

Một ví dụ về cơ sở dữ liệu

Dưới đây là ví dụ về một truy vấn có thể trông như thế nào khi chèn nội dung của tệp vào cơ sở dữ liệu:

INSERT INTO MyTable (FileId, UserId, MyBlobColumn) 
VALUES (1, 20, LOAD_FILE('/data/test.txt'));

Trong trường hợp này, cột MyBlobColumn có kiểu dữ liệu BLOB (cho phép nó lưu trữ dữ liệu nhị phân).

Và bây giờ nó đã có trong cơ sở dữ liệu, chúng tôi có thể chọn nó:

SELECT MyBlobColumn
  FROM MyTable
  WHERE UserId = 20;

Kết quả:

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

Nếu tệp không tồn tại

Nếu tệp không tồn tại, NULL được trả lại:

SELECT LOAD_FILE('/data/oops.txt') AS Result;

Kết quả:

+--------+
| Result |
+--------+
| NULL   |
+--------+

Thêm lý do bạn có thể nhận được NULL

Bạn cũng sẽ nhận được NULL một trong các điều kiện sau không được đáp ứng:

  • Tệp phải được đặt trên máy chủ lưu trữ.
  • Bạn phải có FILE đặc quyền để đọc tệp. Người dùng có FILE đặc quyền có thể đọc bất kỳ tệp nào trên máy chủ lưu trữ mà máy chủ MySQL có thể đọc được trên toàn thế giới hoặc có thể đọc được bởi máy chủ MySQL.
  • Tất cả mọi người đều phải đọc được tệp và kích thước của tệp nhỏ hơn max_allowed_packet byte. Đây là cách bạn có thể kiểm tra điều đó:
    SHOW VARIABLES LIKE 'max_allowed_packet';

    Kết quả của tôi:

    +--------------------+----------+
    | Variable_name      | Value    |
    +--------------------+----------+
    | max_allowed_packet | 67108864 |
    +--------------------+----------+
  • Nếu secure_file_priv biến hệ thống được đặt thành tên thư mục khác, tệp được tải phải nằm trong thư mục đó. Dưới đây là cách bạn có thể kiểm tra rằng:
    SHOW VARIABLES LIKE 'secure_file_priv';

    Kết quả của tôi:

    +------------------+--------+
    | Variable_name    | Value  |
    +------------------+--------+
    | secure_file_priv | /data/ |
    +------------------+--------+

    Trong ví dụ này, tôi chỉ có thể đọc các tệp từ / data / thư mục.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhập cơ sở dữ liệu bằng dòng lệnh

  2. PHP với lỗi MySQL 8.0+:Máy chủ đã yêu cầu phương thức xác thực không xác định đối với máy khách

  3. Cách đảm bảo cơ sở dữ liệu MySQL của bạn được bảo mật

  4. Trích xuất chuỗi con MySQL sử dụng dấu phân cách

  5. Cách lấy tháng từ ngày trong MySQL