2017-07-30 121 views
0

我有一個名爲message_text的名爲具有列(BLOB)的消息的表。當用戶發送新消息並且我想檢查它是否是完全重複的消息文本時,我從Web應用程序傳遞值。在MySQL中用於Blob比較的字符串where子句

SELECT count(message_id) FROM messages WHERE message_text = '$msgTxt' AND user_id = $userId 

其中$ msgTxt將是一個格式化字符串像...

"Hello there. I don\'t know you. 

I\'ve just made a new line. " 

的問題是比較不工作,我從來沒有發現重複。即使我從數據庫中直接複製/粘貼現有​​值,並在我的查詢中將其替換爲$ msgTxt,我從來沒有得到任何結果,所以我假設我將blob與字符串進行比較的方式存在問題。

+0

你需要先轉換你的文字 – ketrox

+0

謝謝ketrox,但是有什麼想法如何?我試過在message_text列上使用CONVERT和CAST,但到目前爲止我仍然無法獲得比較 – d3wannabe

回答

0

將BLOB值視爲二進制字符串(字節字符串)。它們具有二進制字符集和歸類,並且比較和排序基於列值中字節的數值。字符串或文本值被視爲非二進制字符串(字符串)。它們具有二進制以外的字符集,並且根據字符集的排序規則對值進行排序和比較。

因此,您必須將BLOB轉換爲字符串或將字符串轉換爲BLOB,然後將兩者進行比較。

如果正在使用Java,

轉換斑點到字符串

字節[] BDATA = blob.getBytes(1,(INT)blob.length());

String data1 = new String(bdata);

+0

感謝背景DIksha,但我正在使用MySQL – d3wannabe

0

你用什麼API調用MySQL?我看到一些反斜槓,但需要驗證\沒有變成\\,並且其他轉義不會不必要地發生或不發生。

您正在使用哪種操作系統? Windows在閱讀內容時喜歡將NL轉換爲CRLF,從而使它不會匹配。