我需要根据一组关键字在数据库中执行名称搜索。结果应该是重音敏感且不区分大小写。
根据解决方案,我发现here加上一些修改以允许不区分大小写,我使用了以下代码:
$sql = "SELECT name FROM table_names WHERE LOWER(name) LIKE _utf8 '%".strtolower($keyword)."%' COLLATE utf8_bin";
当搜索关键字包含重音时,这对我不起作用。但奇怪的是这个查询在phpMyAdmin中运行良好(但我在某处读到这应该不可靠)。这可能是什么问题?
更新: 我将我的代码修改为:
$sql = "SELECT name FROM table_names WHERE LOWER(name) LIKE LOWER(_utf8 '%$keyword%') COLLATE utf8_bin";
但我仍然没有结果。
谢谢!
答案 0 :(得分: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$$
这个对我有用......