2017-07-30 52 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,从而使它不会匹配。