我如何在 CakePHP 中执行不区分重音的搜索?
How can I perform accent insensitive searches in CakePHP?
我在数据库中执行搜索时遇到问题。我的 table 拥有以下记录:
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
,它 returns 没有结果。但是,如果我搜索 Nicolas
(不带重音符号),则会找到记录。
我需要的是能够执行不区分重音的搜索。这应该适用于其他外来字符,例如字母 Ñ
.
有几种方法可以做到这一点,但也许最简单的方法是将 table 的排序规则更改为 utf8_general_ci
:
ALTER TABLE inscripciones_atributos COLLATE = utf8_general_ci;
这将允许您执行不区分大小写和不区分重音的搜索,以及其他等同字符,如中所述:
确保记录采用 UTF8 编码。
我在数据库中执行搜索时遇到问题。我的 table 拥有以下记录:
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
,它 returns 没有结果。但是,如果我搜索 Nicolas
(不带重音符号),则会找到记录。
我需要的是能够执行不区分重音的搜索。这应该适用于其他外来字符,例如字母 Ñ
.
有几种方法可以做到这一点,但也许最简单的方法是将 table 的排序规则更改为 utf8_general_ci
:
ALTER TABLE inscripciones_atributos COLLATE = utf8_general_ci;
这将允许您执行不区分大小写和不区分重音的搜索,以及其他等同字符,如中所述:
确保记录采用 UTF8 编码。