我在两台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
TI不知道它是否与不同的操作系统版本有任何关系,我怀疑没有,但我不知道问题是什么。
任何指针都感激不尽。
感谢。
答案 0 :(得分:4)
我使用了与电子邮件匹配的查询,当我切换到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);
答案 1 :(得分:1)
@符号是一个运算符,与BOOLEAN SEARCH冲突...不应该...它是一个错误。
这篇文章指出,这很可能是InnoDB和MyISAM的问题...
https://bugs.mysql.com/bug.php?id=74042
也许,您在一台计算机的数据库上安装了MyISAM ...不知道。
答案 2 :(得分:1)
背景是什么? $divisor
命令行工具?外壳脚本? Java的? PHP的?其他?我怀疑,对此的答案将导致改变。
很可能在UPDATE board
SET score = score * (1 - ?)
WHERE player = ?;
之前加上mysql
将对其进行修复。而且该修复程序可能在两种操作系统上均有效。
您知道投诉是否与@
中的\
有关吗?还是所有@
?尝试用空格替换AGAINST
中的@
。
然后,由于“律师”和“域”可能并不相邻,因此可能有必要说
@
FT为您提供表演; AGAINST
再次检查结果。
注意:除非您将最小令牌大小设置为2,否则MATCH(question) AGAINST('+lawyer +domain +com +au' IN BOOLEAN MODE)
AND question LIKE '%lawyer@domain.com.au%'`
将导致零命中。一种解决方法是不要在短于最小令牌大小的任何“单词”上使用LIKE
。 (+au
覆盖了您。)
答案 3 :(得分:0)
尝试使用以下语法:
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%'