php, mysql: сравнивать строки - чувствительно к акценту и регистру - PullRequest
2 голосов
/ 21 сентября 2010

Мне нужно выполнить поиск по имени в базе данных на основе набора ключевых слов. результат должен быть чувствительным к акценту и нечувствительным к регистру.

в соответствии с решением, которое я нашел здесь плюс несколько модификаций для учета регистра без учета регистра, я использовал следующий код:

$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";

но у меня все еще нет результатов.

спасибо!

1 Ответ

2 голосов
/ 21 сентября 2010

Вы можете попытаться повторить выполняемый sql и проверить, есть ли здесь акценты.

Я думаю, их нет ...

[EDIT]

Можете ли вы попробовать это:

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$$

Этот работает для меня...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...