matrixorigin / matrixorigin/matrixone

[Compatibility]: ODKU ignores case-insensitive and trailing-space unique collations

Open
#28,164 20 comments 0 reactions 1 assignee Claimed by @VioletQwQ-0 View on GitHub
kind/bug severity/s1
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.