matrixorigin / matrixorigin/matrixone

[Feature Request]: Unsupported data types in 3.0-dev

Open
#24,491 0 comments 0 reactions 1 assignee Claimed by @daviszhen View on GitHub
kind/compatibility kind/feature priority/p2
Dominant language
Go
Stars
1.9k
Forks
311
Avg merge
1d 3h
Merged PRs (30d)
768

Description

# 3.0-dev不支持的数据类型

## 环境信息
- **MatrixOne 版本**: 8.0.30-MatrixOne-v3.0:5e4210029
- **测试方式**: 根据 MySQL 8.0 Reference Manual ([Chapter 13 Data Types](https://dev.mysql.com/doc/refman/8.0/en/data-types.html)) 全面验证数据类型兼容性

## 问题概述
在 MatrixOne v3.0 版本中,以下 **3项数据类型相关功能** 当前不支持 MySQL 8.0 行为:

---

## 1. DOUBLE PRECISION 语法 (1项)

| 功能 | SQL示例 | 错误信息 |
|------|---------|----------|
| DOUBLE PRECISION | CREATE TABLE t1 (c DOUBLE PRECISION); | ERROR 1064 (HY000): SQL parser error: You have an error in your SQL syntax; check the manual that corresponds to your MatrixOne server version for the right syntax to use. syntax error at line 1 column 35 near " PRECISION)"; |

**替代方案**: 使用 `DOUBLE` 代替
```sql
-- 不支持
CREATE TABLE t1 (c DOUBLE PRECISION);
-- 推荐
CREATE TABLE t1 (c DOUBLE);
```

---

## 2. 空间数据 SRID 约束 (1项)

| 功能 | SQL示例 | 错误信息 |
|------|---------|----------|
| SRID 约束 | CREATE TABLE t1 (c POINT NOT NULL SRID 4326); | ERROR 1064 (HY000): SQL parser error: You have an error in your SQL syntax; check the manual that corresponds to your MatrixOne server version for the right syntax to use. syntax error at line 1 column 38 near " SRID 4326)"; |

**说明**: SRID (Spatial Reference System Identifier) 用于指定空间数据的坐标系。

**替代方案**: 在应用程序层管理 SRID 信息,或使用单独的列存储 SRID。
```sql
-- 不支持
CREATE TABLE t1 (c POINT NOT NULL SRID 4326);
-- 替代方案
CREATE TABLE t1 (c POINT, srid INT DEFAULT 4326);
```

---

## 3. SPATIAL INDEX 空间索引 (1项)

| 功能 | SQL示例 | 错误信息 |
|------|---------|----------|
| SPATIAL INDEX | CREATE TABLE t1 (c POINT, SPATIAL INDEX idx_c (c)); | ERROR 1064 (HY000): SQL parser error: You have an error in your SQL syntax; check the manual that corresponds to your MatrixOne server version for the right syntax to use. syntax error at line 1 column 39 near " INDEX idx_c (c))"; |

**说明**: SPATIAL INDEX 用于优化空间数据的查询性能。

**替代方案**: 使用普通索引或应用层空间计算。
```sql
-- 不支持
CREATE TABLE t1 (c POINT, SPATIAL INDEX idx_c (c));
-- 替代方案:使用普通索引
CREATE TABLE t1 (c POINT, INDEX idx_c (c));
```

---

## 已支持的数据类型(62项)

### 13.1 数值数据类型
- ✅ INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
- ✅ INT(显示宽度), UNSIGNED, ZEROFILL, AUTO_INCREMENT
- ✅ DECIMAL, DECIMAL(M,D), NUMERIC, NUMERIC(M,D)
- ✅ FLOAT, DOUBLE, FLOAT(M,D)
- ✅ BIT, BIT(n)

### 13.2 日期和时间数据类型
- ✅ DATE, DATETIME, DATETIME(fsp)
- ✅ TIMESTAMP, TIMESTAMP(fsp)
- ✅ TIME, TIME(fsp)
- ✅ YEAR, YEAR(4)
- ✅ DEFAULT CURRENT_TIMESTAMP, ON UPDATE CURRENT_TIMESTAMP

### 13.3 字符串数据类型
- ✅ CHAR, CHAR(n), VARCHAR(n)
- ✅ BINARY, BINARY(n), VARBINARY(n)
- ✅ TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB
- ✅ TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT
- ✅ ENUM, SET

### 13.4 空间数据类型(基本类型)
- ✅ GEOMETRY, POINT, LINESTRING, POLYGON
- ✅ MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION

### 13.5 JSON 数据类型
- ✅ JSON

### 13.6 数据类型默认值
- ✅ DEFAULT 常量值, DEFAULT NULL
- ✅ NOT NULL DEFAULT
- ✅ VARCHAR DEFAULT 字符串

---

## 建议优先级

| 优先级 | 功能 | 理由 |
|:------:|------|------|
| 低 | DOUBLE PRECISION | 有替代方案 DOUBLE,功能等价 |
| 中 | SRID 约束 | 影响空间数据规范性,但有替代方案 |
| 中 | SPATIAL INDEX | 影响空间查询性能,建议后期支持 |

---

## 总体评价

MatrixOne v3.0 对 MySQL 8.0 数据类型的支持非常完善,**总体兼容率达 95.4%**(62/65项)。

3项不支持的功能主要是:
1. SQL 标准语法变体(DOUBLE PRECISION)
2. 空间数据高级功能(SRID、SPATIAL INDEX)

对于绝大多数 OLTP 应用场景,当前的数据类型支持完全足够。空间数据的基本存储和查询功能已完整支持,仅缺少部分高级优化特性。

---

## 测试脚本

如需复现,可参考测试脚本中的相关测试用例。

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.