MySQL变音符号不敏感搜索(西班牙语口音)

Hec*_*cr7 10 php mysql character-encoding

我有一个MySQL数据库,其中的单词包含西班牙语(áéíóú)的重音符号.我想知道是否有任何方法可以进行变音符号的不敏感搜索.例如,如果我搜索"lapiz"(没有重音),我想从我的数据库中获得包含单词"lápiz"的结果.我目前正在进行查询的方式如下:

$result = mysql_query("SELECT * FROM $lookuptable WHERE disabled = '0' AND name LIKE '%$q%' OR productCode LIKE '%$q%' LIMIT $sugglimit");
Run Code Online (Sandbox Code Playgroud)

这是一个在线商店,所以我不知道人们会搜索什么..."lapiz"只是一个例子.

alt text http://www.freeimagehosting.net/uploads/0e7c2ae7d5.png

谢谢!

Wri*_*ken 22

字符集和校对,不是我的最爱,但它们可以工作:

mysql> SET NAMES latin1;
mysql> SELECT 'lápiz' LIKE 'lapiz';
+-----------------------+
| 'lápiz' LIKE 'lapiz' |
+-----------------------+
|                     0 | 
+-----------------------+
1 row in set (0.01 sec)

mysql> SET NAMES utf8;
mysql> SELECT 'lápiz' LIKE 'lapiz';
+-----------------------+
| 'lápiz' LIKE 'lapiz' |
+-----------------------+
|                     1 | 
+-----------------------+


mysql> SET NAMES latin1;
mysql> SELECT _utf8'lápiz' LIKE _utf8'lapiz' ;
+---------------------------------+
| _utf8'lápiz' LIKE _utf8'lapiz' |
+---------------------------------+
|                               1 | 
+---------------------------------+
Run Code Online (Sandbox Code Playgroud)

在手册中阅读的一个很好的章节:字符集支持


Nul*_*ion 6

如果将表的字符集设置为UTF-8并将字体设置为utf8 _*_ ci(_ci表示"不区分大小写")MySQL将默认执行大小写和重音不敏感搜索

在此处阅读有关字符集和排序规则的更多信息:http:
//dev.mysql.com/doc/refman/5.1/en/charset-charsets.html

我测试了它

"lapiz" matches: "lápiz," "lapíz," and "lapiz"
"nino" matches: "niño," "ninó," and "nino"
Run Code Online (Sandbox Code Playgroud)

您可以在创建时设置表的排序规则:

CREATE TABLE table ( ... )
CHARACTER SET uft8 COLLATE utf8_general_ci;
Run Code Online (Sandbox Code Playgroud)

或者你可以ALTER,如果它已经存在.有关更多信息,请阅读手册(上面的链接).
如果您使用的是phpMyAdmin,则可以在创建表时选择排序规则.


小智 6

您可以强制将列名转换为 UTF8。我还没有尝试过针对西班牙语,而是针对带有口音的罗马尼亚语字符,但我认为这是同一回事。

我使用的查询是:

SELECT CONVERT('gîg?' USING utf8) LIKE '%giga%'
Run Code Online (Sandbox Code Playgroud)

或者在更可能的情况下查找表中的列,您可以使用:

SELECT CONVERT(column_name USING utf8) FROM table_name LIKE '%giga%'
Run Code Online (Sandbox Code Playgroud)