2010-09-29 7 views
10

Khám phá một số bảng có các trường blob. Làm thế nào tôi có thể làm một select * với khách hàng dòng lệnh và có nó surpress việc in ấn (hoặc cắt ngắn đến một lĩnh vực chiều rộng tiêu chuẩn) các lĩnh vực blob hơn là di chuyển một bó rác nhị phân trên màn hình? Điều này là với khách hàng mysql 5.1. Chỉ muốn làm một lựa chọn * và không liệt kê tất cả các trường không phải blob riêng lẻ, để phát triển.cách để khách hàng dòng lệnh mysql không in các trường màu trong lựa chọn *

+0

Xem xét câu hỏi liên quan này: http://stackoverflow.com/questions/9122/select-all-columns-except-one-in-mysql Không chính xác những gì bạn đang tìm kiếm, nhưng nó cho phép loại trừ các cột cụ thể và việc loại trừ tự động các trường BLOB thậm chí có thể thực hiện được bằng cách sử dụng INFORMATION_SCHEMA –

+0

Cảm ơn. Không ai trong số những người đang thực sự trên mục tiêu nhưng tôi cho rằng tôi có thể viết một thủ tục được lưu trữ có sử dụng dữ liệu meta để tự động tạo ra các truy vấn và bỏ qua hoặc cắt ngắn teh blog. Có vẻ như cú pháp câu lệnh sẽ cần được mở rộng đến SELECT * EXCEPT blob_column từ bảng, vv .. – tribalvibes

Trả lời

3

Điều này có thể được thực hiện tự nhiên trong MySQL, nhưng nó khá khó sử dụng:

SET @sql=CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM 
    INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='test' 
    AND DATA_TYPE!='blob'), ' FROM test.test'); 
PREPARE preparedsql FROM @sql; 
EXECUTE preparedsql; 
DEALLOCATE PREPARE preparedsql; 

Tôi thường thích bí danh BASH/chức năng để làm thủ tục MySQL là họ đang vận chuyển hơn giữa các hệ thống:

function blobless() 
{ 
    cols='' 
    _ifs=$IFS 
    IFS=$(echo -en "\n\b") 
    for col in $(mysql --skip-column-names -e "SELECT COLUMN_NAME FROM 
     INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='$1' AND TABLE_NAME='$2' 
     AND DATA_TYPE NOT LIKE '%blob'"); do 
    cols="$cols,$col" 
    done 
    IFS=$_ifs 
    mysql -e "SELECT $(echo $cols | cut -c2-) FROM $1.$2 $3" 
} 

Gọi như vậy:

[andy ~]# blobless test test "where id>0" 
+----+--------+ 
| id | t  | 
+----+--------+ 
| 1 | 123 | 
| 2 | 124213 | 
+----+--------+ 

Nếu bạn đang ở trong bảng điều khiển khách hàng MySQL sử dụng Ctrl-Z để tạm ngưng chương trình và thả vào trình bao. Sau đó, sử dụng blobless db table để kiểm tra dữ liệu blobless đó. fg sẽ khôi phục công việc bị tạm ngưng (ví dụ: máy khách MySQL) sang nền trước.

Bạn có thể đặt chi tiết kết nối MySQL mặc định trong ~/.my.cnf (howto) để lưu bạn phải cung cấp lưu trữ/người dùng/chuyển trên dòng lệnh - điều này cũng sẽ được sử dụng bởi hàm BASH.

+0

Xây dựng truy vấn thú vị trong lần đầu tiên, nhưng tôi cũng đã xử lý tương tự như giải pháp "blobless()" của bạn cũng cung cấp – DRapp

+0

đẹp, cảm ơn! – tribalvibes