2011-04-14 91 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

從我的理解,如果你想搜索一個字符串,確保一切都是一個字符串。

另外,將字符集切換爲不區分大小寫。不需要它是二進制的。