matrixorigin / matrixorigin/matrixone
[Compatibility]: ODKU ignores case-insensitive and trailing-space unique collations
- Dominant language
- Go
- Stars
- 1.9k
- Forks
- 311
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 768
Description
## 现象
在 MatrixOne main `99ed717b769e261b842c2f17345bd65865fc1470`,ODKU 没有按非二进制字符串唯一键的排序规则判定冲突:
```sql
CREATE TABLE ci (
id INT PRIMARY KEY,
k VARCHAR(32) COLLATE utf8mb4_general_ci UNIQUE,
v INT
);
INSERT INTO ci VALUES (1, 'Alpha', 10);
INSERT INTO ci VALUES (2, 'alpha', 20)
ON DUPLICATE KEY UPDATE v=VALUES(v);
INSERT INTO ci VALUES (3, 'Alpha ', 30)
ON DUPLICATE KEY UPDATE v=VALUES(v);
```
当前结果是插入 3 行(`Alpha`、`alpha`、`Alpha `),没有触发 duplicate-key UPDATE。二进制唯一键对 `0x6162` 与 `0x4142` 区分正常,说明问题集中在非二进制 collation 的唯一键查找。
## 期望
ODKU 的冲突判定应遵循列声明的 collation;`utf8mb4_general_ci` 下大小写不同及尾随空格不同的字符串应视为相同键并进入 UPDATE 分支。
## 影响
大小写不敏感或忽略尾随空格的业务唯一键可能被重复插入,破坏幂等 upsert 和唯一性约束语义。
## 复现信息
- MatrixOne main: `99ed717b769e261b842c2f17345bd65865fc1470`
- 重复执行 3 次,结果一致
Contributor guide
Assessment
This issue has not been assessed yet.