我在两台mac笔记本电脑上安装了mysql社区5.6.13 -一台使用os x 10.8,另一台使用os x 10.9。
据我所知,mysql的安装是相同的,但相同的全文搜索在每个安装上的行为不同。
我得到的查询是:
SELECT legal_matter.* FROM legal_matter
left join user_account
on user_account.id = legal_matter.lawyer_id
left join client_account
on client_account.id = legal_matter.client_account_id
WHERE MATCH (legal_matter.question) AGAINST ('lawyer@domain.com.au' IN BOOLEAN MODE)
OR user_account.username like '%lawyer@domain.com.au%'
OR legal_matter.display_name like '%lawyer@domain.com.au%'
OR client_account.company_name like '%lawyer@domain.com.au%' 在装有10.8的笔记本电脑上,查询正常执行,在装有10.9的笔记本电脑上,查询报错:
Error Code: 1064. syntax error, unexpected '@', expecting $end 我不知道这是否与不同的操作系统版本有关,我怀疑不是,但我不知道问题是什么。
感谢您所收到的任何指示。
谢谢。
发布于 2016-11-03 19:19:43
当我切换到innodb时,我使用了匹配电子邮件的查询,因为@是用来在InnoDB中搜索相隔一定距离的单词的:
SELECT username FROM users WHERE MATCH(user_email) AGAINST('test@user.com' IN BOOLEAN MODE);
ERROR 1064 (42000): syntax error, unexpected '@', expecting $end
SELECT username FROM users WHERE MATCH(user_email) AGAINST("test@user.com" IN BOOLEAN MODE);
ERROR 1064 (42000): syntax error, unexpected '@', expecting $end
mysql>尝试这样包装您的电子邮件地址:
SELECT username FROM users WHERE MATCH(user_email) AGAINST('"test@user.com"' IN BOOLEAN MODE);或转义:
SELECT username FROM users WHERE MATCH(user_email) AGAINST('\"test@user.com\"' IN BOOLEAN MODE);发布于 2018-08-21 23:23:39
@符号是一个运算符,与布尔搜索冲突...不应该..。这是个bug。
这篇文章指出,更有可能是InnoDB和MyISAM的问题……
https://bugs.mysql.com/bug.php?id=74042
也许,你在一台机器的DB上有MyISAM ...不知道。
发布于 2018-08-22 01:47:57
什么是上下文?mysql命令行工具?shell脚本?Java?PHP?其他的?我怀疑这个问题的答案将导致什么改变。
\之前的@很可能会解决这个问题。而且这个修复可能在这两个操作系统上都有效。
您是否知道投诉是否与AGAINST中的@有关?还是所有的@?尝试将AGAINST中的@替换为空格。
然后,由于“律师”和“域”可能不是相邻的,所以可能有必要说明
MATCH(question) AGAINST('+lawyer +domain +com +au' IN BOOLEAN MODE)
AND question LIKE '%lawyer@domain.com.au%'`FT给出了性能;LIKE仔细检查了这一结果。
注意:除非您将最小令牌大小设置为2,否则+au将导致零命中。一种解决方法是不在任何小于最小标记大小的“单词”上使用+。( LIKE会覆盖您。)
https://stackoverflow.com/questions/22736163
复制相似问题