php - 从多个输出中选择mysql中带有特殊字符的一个

标签 php mysql special-characters fetch collation

在我的数据库中,同一个单词有两种形式。例如,当我搜索 amor 时,我会得到 amorāmōr。如何从数据库中获取āmōr

最佳答案

如果您不想搞乱排序规则(出于某种原因):

SELECT a.text
FROM table a
WHERE a.text = 'amor'
AND BINARY(a.text) = BINARY('amor')

我将第一个条件保留为纯文本,以便 MySQL 可以在 text 上使用索引(如果存在)。第二个条件将确保您只获得您搜索的确切文本(包括大小写)。

编辑:基于评论。

如果您确实想获得带重音的结果,则需要使用忽略此类重音的排序规则。您需要使用的排序规则取决于列的排序规则..

尝试以下任一方法:

SELECT a.text
FROM table a
WHERE a.text = 'amor'
COLLATE 'utf8_general_ci';

或者:

SELECT a.text
FROM table a
WHERE a.text = 'amor'
COLLATE 'latin1_general_ci';

编辑#2:基于更多评论。

如果存在多个匹配项,则始终获取带重音的版本:

SELECT a.text
FROM table a
WHERE a.text = 'amor' -- this condition returns both results
ORDER BY LENGTH(BINARY(a.text)) DESC
LIMIT 1

关于php - 从多个输出中选择mysql中带有特殊字符的一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40368692/

相关文章:

php - 将多个值插入到mysql中的列中

mysql - 当数据不存在时返回 NULL 或空值

mysql - 从mysql中的上一行中减去值

php - 在 LIKE 查询中查找 % 字符

php - 如何删除位于 img/p/的 Prestashop 无用图像

php - 尝试在提交前获取菜单值

php - 删除php中的特殊字符

javascript - 如何在 Angular Directive(指令)属性中使用特殊字符?

php - EC2 用户数据卡在 "Checking init scripts..."ubuntu php

php - 无法通过插入查询来使用 php 插入 id