如何在CakePHP中执行重音不敏感搜索?

时间:2015-12-15 17:25:00

标签: mysql cakephp cakephp-2.x

我在数据库中执行搜索时遇到问题。我的表中包含以下记录:

id : 5
Name : Nicolás
created : 2015-12-15 13:08:22
modified : 2015-12-15 13:08:22

在我的一项职责中,我根据用户输入的内容进行搜索:

$replaceConditionsInBD = "CONVERT( CAST( UPPER(TRIM(REPLACE(REPLACE(REPLACE(InscripcionesAtributo.valor, ',',''), '.',''), '-',''))) AS BINARY) USING utf8) LIKE";
$condition = '%'.$valor.'%';
$participantes = $this->Participante->Inscripcion->InscripcionesAtributo->find('all', array(
    'conditions' => array(
        $replaceConditionsInBD => $condition,
    ),
    'group'=> array('InscripcionesAtributo.inscripcion_id'),
    'fields'=> array('Inscripcion.id'),
    'contain'=> array('Inscripcion.evento_id = '.$this->eventoID)));        

如果我使用重音执行搜索,例如名称Nicolás,则不会返回任何结果。但是,如果我搜索Nicolas(没有重音),则会找到记录。

我需要的是能够执行重音不敏感搜索。这应该适用于其他外国字符,例如字母Ñ

1 个答案:

答案 0 :(得分:3)

有几种方法可以实现这一点,但也许最简单的方法是将表的排序规则更改为utf8_general_ci

ALTER TABLE inscripciones_atributos COLLATE = utf8_general_ci;

这将允许您进行不区分大小写和不区分重音的搜索,以及其他字符等效,如下所示:

确保记录是UTF8编码的。