mysql - 通过变音符号搜索的MYSQL错误结果
问题描述
我在 mysql 5.7.26 中设置了一个 InnoDB。字符集是 utf8mb4,但现在我在通过变音符号过滤时发现了一些错误行为。
设置:
mysql> SHOW VARIABLES WHERE Variable_name RLIKE '^(character_set|collation)_' ;
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_general_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
CREATE TABLE `umlauttest` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`umlautvalue` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
SELECT * from umlauttest;
+----+-------------+
| id | umlautvalue |
+----+-------------+
| 1 | max |
| 2 | maximilian |
| 3 | maximum |
| 4 | mäx |
| 5 | abcmäxabc |
+----+-------------+
错误
列表中的前三个值不包含元音变音(这里是字符ä
),但最后两个值包含。因此,以下查询的计数应为第一个(不带变音符号)为 3,第二个(带变音符号)为 2。不幸的是,这两个查询的结果都是 5,这告诉我元音变音被忽略/无法识别
SELECT COUNT(id) FROM `umlauttest` WHERE `umlautvalue` LIKE '%max%';
SELECT COUNT(id) FROM `umlauttest` WHERE `umlautvalue` LIKE '%mäx%';
您是否知道如何解决这种奇怪的行为。我感谢任何将我指向正确方向的提示。
最佳-endo
编辑
要设置排序规则就可以了:
SELECT COUNT(id) FROM `umlauttest`
WHERE `umlautvalue` LIKE '%mäx%' collate utf8mb4_bin;
解决方案
推荐阅读
- ios - 计算并显示为标签
- python - 如何在 Python 中从数据框中显示 wordcloud
- mailchimp - 如何为 Mailchimp、SES 和 EC2 设置 SPF 以使 DMARC 不会因未对齐而部分失败
- javascript - 通过单击随机更改 React 应用程序的背景颜色
- python - 如何从数字列表中获取所有可能的排列并存储在数据框中?
- c - -DNDEBUG 与 -Ofast 比仅 -Ofast 慢
- go - 如何合并两个相同结构类型的 Go 值?
- c# - 如何在我的 vs 解决方案中添加和使用 NLua?
- dependency-injection - 如果在 @Provides 方法中将 Injector 作为参数传递会发生什么
- r - 使用另一个数据框中的值生成 dplyr 参数