我需要搜索一个数据库上的文本字段,避免特殊字符不匹配,但为同一个短语。例如,如果我在db字段中的搜索项保存为“i lò虚拟mysqlánd query“我想匹配搜索”i love mysqlánd query“,”我爱mysql和query“,”i lö虚拟mysqlá“nd查询”等。我在考虑用php函数将短语转换成“我喜欢mysql和query”,但我不确定我能不能在查询中将它们转换成平地?
pxy2qtax1#
由于您的数据已经用重音符号写入数据库,您是否可以尝试使用db排序规则在重音符号之间直接Map:
$connection->query("SET NAMES utf8 COLLATE utf8_general_ci");
你可以在这里了解更多上面的页面清楚地解释了这个排序规则将为您做什么:
mysql> SET NAMES 'utf8' COLLATE 'utf8_general_ci'; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET UTF8 COLLATE utf8_general_ci); Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO t1 VALUES ('a'),('A'),('À'),('á'); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> SELECT c1, HEX(c1), HEX(WEIGHT_STRING(c1)) FROM t1; +------+---------+------------------------+ | c1 | HEX(c1) | HEX(WEIGHT_STRING(c1)) | +------+---------+------------------------+ | a | 61 | 0041 | | A | 41 | 0041 | | À | C380 | 0041 | | á | C3A1 | 0041 | +------+---------+------------------------+ 4 rows in set (0.00 sec)
您也可以直接在db中测试它(测试从这里开始):
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)
1条答案
按热度按时间pxy2qtax1#
由于您的数据已经用重音符号写入数据库,您是否可以尝试使用db排序规则在重音符号之间直接Map:
你可以在这里了解更多
上面的页面清楚地解释了这个排序规则将为您做什么:
您也可以直接在db中测试它(测试从这里开始):