2011-04-14 120 views
0

我在多个表中搜索不同的值时遇到问题。当我搜索“保罗”时,我什么也没有收到,但是如果我搜索“保罗”,我会得到相应的人以保罗这个名字命令。搜索不区分大小写的

$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(二进制),但我的问题仍未解决..

所有的建议都感激..

问候

回答

1

从MySQL手册:

默认字符集和整理是LATIN1和 latin1_swedish_ci,所以非二进制字符串比较是区分 默认不敏感的。这意味着如果您使用col_name LIKE'a%'进行搜索,则会获得以A或a开头的所有列值。要使 此搜索大小写敏感,请确保其中一个操作数具有区分大小写或二进制排序规则 。例如,如果您比较 列和一个字符串,它都有latin1字符集,你可以 使用COLLATE操作符,使操作具有 latin1_general_cs或latin1_bin校对特性:

见:mysql case sensitivity

1

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

从我的理解,如果你想搜索一个字符串,确保一切都是一个字符串。

另外,将字符集切换为不区分大小写。不需要它是二进制的。