2011-03-27 86 views
3

为了将问题短语搜索,MySQL的文档上写着:MySQL的使用匹配反对票与不敏感的情况下

在比赛上引用的字符串/在第 是大小写敏感的...

我DATAS :

INSERT INTO table.col VALUES ('this is a custom phrase to match'); 

我的查询:

SELECT * FROM table 
WHERE MATCH (col1,..,col10) AGAINST ('"Custom Phrase"' IN BOOLEAN MODE) 

由于大小写不匹配。


我正在寻找一种方式来使用此查询在不区分大小写的方式

一些地方这些短语将所有的数据相匹配:

  • “自定义短语”
  • “Custom Phrase”
  • “CUSTOM PHRASE”
  • “CuStOm PhRAsE”

任何帮助是值得欢迎的,谢谢你提前^^

回答

2

阅读本月底(http://bugs.mysql.com/bug.php?id=22343),它说,这是因为你已经混合了不同的列类型。

如果您必须跨列进行搜索,请将它们全部(包括在转换过程中指定归类)转换为MATCH左侧的文本类型。

1

MySQL Reference指出默认情况下使用latin1非二进制排序规则是不区分大小写的。看起来你也可以使用分页功能强制进行特定设置(不区分大小写或区分大小写)。

1

thanx您的帮助

因为我面临了一台不能包含超过16列(而我需要33列匹配)全文索引另一个问题,我决定用另一种方式:

(当谈到关于全文搜索出现了很多的解决方案)

  1. 我串接在一个字符串的一个行的所有列,这是我转换为小写。

  2. 我将这个字符串保存在一个新添加的列(类型为longtext,带有全文索引),专门用于此FT搜索并在每次插入/更新查询后更新。

  3. 现在我需要在使用布尔模式时将小写字母传递给AGAINST子句。如果所有数据都是小写,区分大小写的搜索不再是一个问题。

    SELECT * FROM表WHERE MATCH(longtextcol) AGAINST( ' “小写词组” lowercaseword1 lowercaseword2')

感谢您的答复^^

+0

尼斯小费! :)在这里做同样的事情。不知道那个丑陋的错误。我正在使用UTF-8!谢谢 :) – 2012-04-27 16:32:15