matrixorigin / matrixorigin/matrixone
[Feature Request]: Unsupported data types in 3.0-dev
- 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
Assessment
This issue has not been assessed yet.