daaxiang
(daaxiang)
1
【 TiDB 使用环境】Poc
【 TiDB 版本】 8.0.11-TiDB-v7.4.0
【遇到的问题:strcmp函数】
MySQL [test]> select strcmp(‘ABC’,‘ABc’);
±--------------------+
| strcmp(‘ABC’,‘ABc’) |
±--------------------+
| 0 |
±--------------------+
1 row in set (0.00 sec)
疑问:在TiDB-v7.4.0,字符’ABC’和’ABc’是等值的吗?
dba远航
(Ti D Ber M Lo7 Bqhk)
8
这个和字符集排序规则collation有关,我以前遇到过类似问题
使用utf8mb4_bin就没有这个问题
1 个赞
tidb默认是区分大小写的,直接create database xxx,用的就是默认的,create database xxx SET utf8mb4 COLLATE utf8mb4_general_ci;哪会导致不一样;
SELECT @@character_set_database, @@collation_database;
检查下当前用的啥呢
1 个赞
小龙虾爱大龙虾
(Minghao Ren)
11
这个和字符集排序规则有关,请看:
MySQL [test]> SET NAMES utf8mb4 COLLATE utf8mb4_bin;
Query OK, 0 rows affected (0.00 sec)
MySQL [test]> select STRCMP('ABC','ABc');
+---------------------+
| STRCMP('ABC','ABc') |
+---------------------+
| -1 |
+---------------------+
1 row in set (0.00 sec)
MySQL [test]> SET NAMES utf8mb4 COLLATE utf8mb4_general_ci;
Query OK, 0 rows affected (0.00 sec)
MySQL [test]> select STRCMP('ABC','ABc');
+---------------------+
| STRCMP('ABC','ABc') |
+---------------------+
| 0 |
+---------------------+
1 row in set (0.00 sec)
MySQL [test]> select version();
+--------------------+
| version() |
+--------------------+
| 5.7.25-TiDB-v6.5.4 |
+--------------------+
1 row in set (0.00 sec)
字符集与排序规则参考:https://docs.pingcap.com/zh/tidb/stable/character-set-and-collation#字符集和排序规则
排序规则优先级参考:https://dev.mysql.com/doc/refman/5.7/en/charset-collation-coercibility.html
根据优先级规则,这里比用的是会话级别的排序规则
1 个赞
小龙虾爱大龙虾
(Minghao Ren)
13
1 个赞
SHOW SESSION VARIABLES LIKE ‘%collation%’;
会话级别的查一下
1 个赞
daaxiang
(daaxiang)
15
此为正解,我客户端的排序规则默认为utf8_general_ci;
设为默认后就符合预期了。
说实话Tidb的文档看得一头雾水,查了mysql的手册才有点眉目。
谢谢楼上各位的帮助。
zhanggame1
(Ti D Ber G I13ecx U)
16
排序规则里面的是是否忽略大小写,会影响到like 匹配,还有字符串比较
swino
18
查看数据库创建时候是否指定字符集和排序规则,以及字符集配置文件
system
(system)
关闭
19
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。