2010-01-25 58 views
51

我有一個查詢在整數字段中使用了mysql的GROUP_CONCAT。
我正在使用PHPMYADMIN來開發此查詢。我的問題,而不是顯示1,2是連接字段的結果,我得到[BLOB - 3B]。在PHPMYADMIN中使用group_concat會將結果顯示爲[BLOB-3B]

查詢

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

(這兩個領域是unsigned int類型,兩者不是唯一的)

我應該加入看到實際效果?

回答

19

只是在查詢結果上方(左邊),你會看到+options。按它並標記

顯示BLOB內容

+0

只是助陣誰也看不到用戶'+ options',不是的phpmyadmin的所有配置有它 – Ejaz

79

看起來好像GROUP_CONCAT希望該值是一個字符串。我遇到了同樣的問題。由INT列轉換爲字符串,像這樣解決了這個問題:

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

想我會分享的情況下,你仍然有這個問題。

39

According to the MySQL documentation,CAST(expr AS type)是標準的SQL,因此應該被優先考慮。另外,您可以省略字符串長度。因此,我建議如下:

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

如果您有機會獲得config.inc.php文件中的phpMyAdmin的目錄,然後 我認爲最好的辦法就是改變這一行:

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

對此:

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

如果您有mysqli擴展可用,請使用它。它更安全,更加優化,並且默認情況下它更好地處理了BLOB類型的utf-8。您的[BLOB]條目應該開始顯示爲其值,而無需添加任何其他特殊配置選項。

+0

會給它一個嘗試 - TNX! –

21

對於我來說,這有助於(發現它在這個blog post):

在我的情況下,參數GROUP_CONCAT是字符串,但功能仍然會導致BLOB,但轉換GROUP_CONCAT的結果工作。

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

謝謝Janne。好的解決方案 –

+0

這可以幫助我:)謝謝Janne – junior

+0

我想擁抱你,踢我設計數據庫的人使用'latin1'編碼。謝謝。 –

0

你可以這樣做:

set session group_concat_max_len = 512; 

如果group_concat_max_len超過512查詢將返回的byte []。 但是你可以傳遞給一個字符串。

System.Text.Encoding.Default.GetString((byte[])DataTable.Rows[0][0]);