2010-09-21 59 views
2

我需要根據一組關鍵字在數據庫中執行名稱搜索。結果應該是區分重音和不區分大小寫的。php,mysql:比較字符串 - 區分重音和不區分大小寫

的解決方案,我發現here加上一些修改,以允許不區分大小寫下面,我用下面的代碼:

$sql = "SELECT name FROM table_names WHERE LOWER(name) LIKE _utf8 '%".strtolower($keyword)."%' COLLATE utf8_bin"; 

在檢索關鍵字中包含的口音,這並不爲我工作。但奇怪的是,這個查詢在phpMyAdmin中運行良好(但是我在某處讀到這應該不可靠)。這裏可能是什麼問題?

UPDATE: 我修改我的代碼:

$sql = "SELECT name FROM table_names WHERE LOWER(name) LIKE LOWER(_utf8 '%$keyword%') COLLATE utf8_bin"; 

,但我仍然沒有結果。

謝謝!

回答

2

您可以嘗試回顯正在執行的sql並檢查重音是否存在。

我猜他們是不是......

[編輯]

你可以試試這個:

PHP。

<html> 
<head> 
</head> 

<body> 
<form action="" method="get"> 
<input name="name" type="text"/> 
<input type="submit" value="go"/> 
</form> 

<?php 
if (!empty($_GET['name'])) { 
    $mysqli = new mysqli('localhost', 'root', '', 'test'); 
    $mysqli->set_charset('latin1'); 

    $_GET['name'] = utf8_encode($_GET['name']); 

    if ($result = $mysqli->query('select * from dummy where LOWER(name) LIKE _utf8 \'%' . $_GET['name'] . '%\' COLLATE utf8_bin')) { 
     while ($obj = $result->fetch_object()) { 
      var_dump($obj->name); 
     } 
    } 
    $mysqli->close(); 
} 
?> 
</body> 
</html> 

MySQL的:(無所謂)

CREATE TABLE `dummy` (
    `id` int(11) NOT NULL, 
    `name` varchar(45) CHARACTER SET latin1 DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin5$$ 

這一個對我的作品......

+0

我想呼應它和口音都在那裏。回聲陳述也是我用來在phpMyAdmin中運行的查詢。 – u11 2010-09-21 07:40:52

+0

檢查我編輯的答案 – sheeks06 2010-09-21 08:15:51

+0

謝謝!但我無法將我的表的排序規則設置爲utf8_bin,因爲它必須是大小寫不敏感的。我只有一個實例,在這個實例中我必須做出一個對口音敏感的比較。 – u11 2010-09-21 08:25:21