strcmp函数的问题

【 TiDB 使用环境】Poc
【 TiDB 版本】 8.0.11-TiDB-v7.4.0
【遇到的问题:strcmp函数】
image
MySQL [test]> select strcmp(‘ABC’,‘ABc’);
±--------------------+
| strcmp(‘ABC’,‘ABc’) |
±--------------------+
| 0 |
±--------------------+
1 row in set (0.00 sec)

疑问:在TiDB-v7.4.0,字符’ABC’和’ABc’是等值的吗?


我看 tidb 和 MySQL 一样表现 :thinking:

1 个赞

那就和教程中的不一样了,是我哪里搞错了么?


教程中的TIDB是V6.1的版本。

看下字符检验规则

1 个赞

:upside_down_face: 7.1.1默认配置是-1
image

1 个赞

看下数据库的默认排序规则是啥呢

1 个赞

这个和字符集排序规则collation有关,我以前遇到过类似问题
使用utf8mb4_bin就没有这个问题

1 个赞

tidb默认是区分大小写的,直接create database xxx,用的就是默认的,create database xxx SET utf8mb4 COLLATE utf8mb4_general_ci;哪会导致不一样;
SELECT @@character_set_database, @@collation_database;
检查下当前用的啥呢

1 个赞

image

1 个赞

这个和字符集排序规则有关,请看:

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 个赞

image
结果好像不一样呢

你看的变量是数据库的默认字符集和排序规则,两个文本直接比并不是走的这个,你需要仔细看下这篇文章,明确各种情况下所用的字符集和排序规则,参考:https://docs.pingcap.com/zh/tidb/stable/character-set-and-collation#字符集和排序规则

1 个赞

SHOW SESSION VARIABLES LIKE ‘%collation%’;
会话级别的查一下

1 个赞

此为正解,我客户端的排序规则默认为utf8_general_ci;
image
设为默认后就符合预期了。
image
说实话Tidb的文档看得一头雾水,查了mysql的手册才有点眉目。

谢谢楼上各位的帮助。

排序规则里面的是是否忽略大小写,会影响到like 匹配,还有字符串比较

看看字符集

查看数据库创建时候是否指定字符集和排序规则,以及字符集配置文件

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。