【问题标题】:php, mysql: compare strings - accent sensitive and case insensitivephp,mysql:比较字符串 - 区分重音和不区分大小写
【发布时间】:2010-09-21 07:33:50
【问题描述】:

我需要根据一组关键字在数据库中执行名称搜索。结果应区分重音且不区分大小写。

按照我找到的解决方案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";

但我仍然没有结果。

谢谢!

【问题讨论】:

    标签: php mysql case-insensitive non-ascii-characters


    【解决方案1】:

    您可以尝试回显正在执行的 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$$
    

    这个对我有用...

    【讨论】:

    • 我尝试了呼应它并且口音在那里。回显语句也是我在 phpMyAdmin 中运行的查询。
    • 谢谢!但我无法将表格的排序规则设置为 utf8_bin,因为它必须不区分大小写和重音。我只有一个实例,我必须进行重音敏感比较..
    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2012-02-29
    相关资源
    最近更新 更多