gpt4 book ai didi

mysql - 如何在不保存以检查是否与外部 ASCII 字符串匹配的情况下即时将列转换为 ASCII?

转载 作者:可可西里 更新时间:2023-11-01 07:10:44 24 4
gpt4 key购买 nike

我有一个成员搜索功能,您可以在其中提供部分姓名,返回的内容应该是至少具有与该输入匹配的用户名、名字或姓氏之一的所有成员。这里的问题是某些名称具有“奇怪”的字符,例如 Renée 中的 é 并且用户不想输入奇怪的字符,而是输入普通的 ASCII 替代字符 e.

在 PHP 中,我使用 iconv 将输入字符串转换为 ASCII(以防有人输入奇怪的字符)。然而,在数据库中,我还应该将奇怪的字符转换为 ASCII(显然)以便匹配字符串。

我尝试了以下方法:

SELECT
CONVERT(_latin1'Renée' USING ascii) t1,
CAST(_latin1'Renée' AS CHAR CHARACTER SET ASCII) t2;

(那是两次尝试。)两者都不起作用。两者都有 Ren?e 作为输出。问号应该是 e。如果它输出 Ren?ee 也没关系,因为我可以在转换后删除所有问号。

如您所想,我要查询的列的编码为 Latin1。

谢谢。

最佳答案

您不需要转换任何东西。您的要求是比较两个字符串并询问它们是否相等,忽略重音;数据库服务器可以使用 collation为你做到这一点:

Non-UCA collations have a one-to-one mapping from character code to weight. In MySQL, such collations are case insensitive and accent insensitive. utf8_general_ci is an example: 'a', 'A', 'À', and 'á' each have different character codes but all have a weight of 0x0041 and compare as equal.

mysql> SET NAMES 'utf8' COLLATE 'utf8_general_ci';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT 'a' = 'A', 'a' = 'À', 'a' = 'á';
+-----------+-----------+-----------+
| 'a' = 'A' | 'a' = 'À' | 'a' = 'á' |
+-----------+-----------+-----------+
| 1 | 1 | 1 |
+-----------+-----------+-----------+
1 row in set (0.06 sec)

关于mysql - 如何在不保存以检查是否与外部 ASCII 字符串匹配的情况下即时将列转换为 ASCII?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4234010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com