2010-01-25 28 views
51

Tôi có truy vấn sử dụng GROUP_CONCAT của mysql trên một trường số nguyên.
Tôi đang sử dụng PHPMYADMIN để phát triển truy vấn này. Vấn đề của tôi thay vì hiển thị 1,2 là kết quả của trường nối, tôi nhận được [BLOB - 3B].sử dụng group_concat trong PHPMYADMIN sẽ hiển thị kết quả dưới dạng [BLOB - 3B]

Query là

SELECT rec_id,GROUP_CONCAT(user_id) 
FROM t1 
GROUP BY rec_id 

(cả hai lĩnh vực là unsigned int, cả hai đều phải là duy nhất)

tôi nên thêm gì để xem kết quả thực tế?

Trả lời

19

Ngay phía trên kết quả truy vấn (ở bên trái), bạn sẽ thấy +options. Nhấn nó và đánh dấu

nội dung Hiện BLOB

+0

Chỉ để trợ giúp những người dùng không thể xem các tùy chọn '+', không phải tất cả cấu hình của phpmyadmin đều có nó – Ejaz

79

Dường như GROUP_CONCAT kỳ vọng giá trị đó là một chuỗi. Tôi chỉ chạy vào cùng một vấn đề. Giải quyết nó bằng cách chuyển đổi cột int thành một chuỗi như sau:

SELECT rec_id,GROUP_CONCAT(CONVERT(user_id, CHAR(8))) 
FROM t1 
GROUP BY rec_id 

Tôi muốn chia sẻ trong trường hợp bạn vẫn gặp sự cố với điều này.

39

According to the MySQL documentation, CAST(expr AS type) là SQL chuẩn và do đó sẽ được suy ra. Ngoài ra, bạn có thể bỏ qua độ dài chuỗi. Do đó, tôi khuyên bạn nên làm như sau:

SELECT rec_id, GROUP_CONCAT(CAST(user_id AS CHAR)) 
FROM t1 
GROUP BY rec_id 
-1

Nếu bạn có quyền truy cập vào các tập tin config.inc.php trong thư mục phpMyAdmin, sau đó Tôi nghĩ rằng giải pháp tốt nhất là thay đổi dòng này:

 
$cfg['Servers'][$i]['extension'] = 'mysql'; 

cho điều này:

 
$cfg['Servers'][$i]['extension'] = 'mysqli'; 

Nếu bạn có sẵn phần mở rộng mysqli, hãy sử dụng nó. Nó an toàn hơn, tối ưu hóa hơn một chút và nó xử lý loại BLOB của utf-8 tốt hơn theo mặc định. Các mục [BLOB] của bạn sẽ bắt đầu hiển thị dưới dạng giá trị của chúng mà không phải thêm bất kỳ tùy chọn cấu hình đặc biệt nào khác.

+0

sẽ thử - tnx! –

21

Đối với tôi, điều này giúp (tìm thấy nó trong blog post này):

Trong trường hợp của tôi các tham số để GROUP_CONCAT là chuỗi nhưng chức năng vẫn dẫn đến một BLOB, nhưng chuyển đổi kết quả của GROUP_CONCAT làm việc.

CONVERT(GROUP_CONCAT(user_id) USING 'utf8') 
+2

Cảm ơn Janne. Giải pháp tuyệt vời. –

+0

Điều đó giúp tôi :) Cảm ơn Janne – junior

+0

Tôi muốn ôm bạn và đá người đã thiết kế cơ sở dữ liệu tôi đang sử dụng để sử dụng mã hóa 'latin1'. Cảm ơn. –

0

Bạn có thể làm điều này:

set session group_concat_max_len = 512; 

Nếu group_concat_max_len là hơn 512 truy vấn sẽ trả byte []. Nhưng bạn có thể chuyển đến một chuỗi.

System.Text.Encoding.Default.GetString((byte[])DataTable.Rows[0][0]); 
Các vấn đề liên quan