2012-05-24 24 views
18

Tôi muốn lưu trữ hình ảnh và các tệp .docx/.doc, .pptx/.ppt, .pdf bằng cách sử dụng phần đầu của phần mềm của tôi. Tôi không hiểu làm thế nào để thực hiện điều này và làm thế nào để chèn các tập tin BLOB và CLOB vào bảng. Hãy giúp tôi.Làm thế nào để chèn các tệp BLOB và CLOB trong MySQL?

Tôi đang sử dụng Kubuntu 11.04, MySQL5, Qt 4.7.3.

Trả lời

23

Hai cách:

1 - Sử dụng một hàm LOAD_FILE -

INSERT INTO table1 VALUES(1, LOAD_FILE('data.png')); 

2 - Chèn tập tin như chuỗi hex, ví dụ -

INSERT INTO table1 VALUES 
    (1, x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082'); 
+2

Một lựa chọn thứ 3 là gần với một thứ 2 và đọc như 'INSERT INTO GIÁ TRỊ table1 (1, 0x89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082); '. – glglgl

+0

Sau đây không hoạt động: INSERT INTO table1 VALUES (1, LOAD_FILE (data.png)); – user1411472

+1

Kiểm tra xem tệp có tồn tại hay không, kiểm tra đường dẫn, kiểm tra kích thước tệp, có hay không chúng là 'max_allowed_packet'. Bạn có đặc quyền FILE? Loại trường BLOB nào, có đủ để lưu trữ tệp không? – Devart

1
INSERT INTO table1 VALUES(1, LOAD_FILE(data.png)); 

sẽ không làm việc nhưng

INSERT INTO table1 VALUES(1, LOAD_FILE('data.png')); 

nên (giả sử data.png tồn tại trong thư mục địa phương)

11
INSERT INTO MY_TABLE(id, blob_col) VALUES(1, LOAD_FILE('/full/path/to/file/myfile.png') 

LOAD_FILE có nhiều điều kiện gắn liền với nó. Từ MySQL documentation:

LOAD_FILE (file_name)

Đọc các tập tin và trả về nội dung tập tin như là một chuỗi. Để sử dụng chức năng này, 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 đủ cho tệp và bạn phải có đặc quyền FILE . Tất cả tệp phải có thể đọc được và kích thước của tệp đó nhỏ hơn byte max_allowed_packet. Nếu biến hệ thống secure_file_priv là đặt thành tên thư mục không phải là rỗng, tệp cần tải phải là nằm trong thư mục đó.

Nếu tệp không tồn tại hoặc không thể đọc được vì một trong các điều kiện trước không thỏa mãn, hàm trả về NULL.

Ngoài ra, còn có lỗi với LOAD_FILE trong Linux. Xem http://bugs.mysql.com/bug.php?id=38403 để biết lỗi và MySQL LOAD_FILE returning NULL để giải quyết sự cố. Trên Ubuntu 12.04, MySQL 5.5.32, điều này làm việc cho tôi:

  1. Sao chép tập tin vào/tmp
  2. Thay đổi sở hữu đối với người sử dụng mysql chown mysql:mysql /tmp/yourfile
  3. Đăng nhập vào mysql với người dùng root mysql vì vậy bạn chắc chắn bạn có fILE đặc quyền
  4. Chạy câu lệnh insert của bạn
+0

Dấu nhắc 'secure_file_priv' đã lưu vào ngày của tôi. Sử dụng 'mysql SELECT @@ secure_file_priv;' để xem giá trị thực tế –

3

Hoặc bạn chỉ có thể sử dụng MySQL Workbench, chọn hàng, hàng cuối cùng, chèn một hàng mà không blob, sau đó click chuột vừa phải và chọn "Load Value From file" .

Các vấn đề liên quan