Mysql搜索案例不敏感

时间:2011-04-14 21:52:10

标签: mysql search

我在多个表中搜索不同的值时遇到问题。当我搜索“保罗”时,我什么都没得到,但是如果我搜索“保罗”,我就会得到相应的人名为保罗。

$get_orders = mysql_query("
SELECT
  co.id, co.final_id, co.shop_id, co.customer_id, co.payment_type, co.payment_currency, co.billing_email, co.billing_first_name, co.billing_last_name, co.delivery_first_name, co.delivery_last_name, UNIX_TIMESTAMP(co.order_created) AS order_created, c.email, s.site_name, 
MATCH(co.final_id, co.billing_first_name, co.billing_last_name, co.delivery_first_name, co.delivery_last_name, co.order_created) 
AGAINST ('$match_against' IN BOOLEAN MODE) AS score 
FROM customer_orders AS co 
LEFT JOIN customers AS c ON c.id = co.customer_id 
LEFT JOIN shops AS s ON s.id = co.shop_id WHERE co.status = '{$os}' 
ORDER BY score DESC 
LIMIT $offset,$views_page") or die(mysql_error());

我一直在寻找解决这个问题的方法。我尝试过使用UPPER,将数据库排序从utf8_general_ci更改为utf8_bin(二进制)但我的问题仍然没有解决..

所有建议都表示赞赏..

此致

2 个答案:

答案 0 :(得分:1)

请参阅http://bugs.mysql.com/bug.php?id=22343

根据我的理解,如果你想搜索字符串,请确保所有内容都是字符串。

此外,将charset切换回不区分大小写。不需要它是二进制的。

答案 1 :(得分:1)

来自mysql手册:

  

默认字符集和排序规则是latin1和   latin1_swedish_ci,所以非二进制字符串比较就是这种情况   默认情况下不敏感。这意味着如果使用col_name进行搜索   LIKE'a%',您将获得以A或a开头的所有列值。要做   这个搜索大小写敏感,确保其中一个操作数有一个   区分大小写或二进制排序规则。例如,如果您正在进行比较   一个列和一个字符串都有latin1字符集,你可以   使用COLLATE运算符使任一操作数具有   latin1_general_cs或latin1_bin整理:

请参阅:mysql case sensitivity