matrixorigin / matrixorigin/matrixone
[Feature Request]: Character set features not supported 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 (Character Sets, Collations, Unicode) 验证字符集兼容性
## 问题概述
在 MatrixOne v3.0 版本中,以下 **13项字符集相关功能** 当前不支持 MySQL 8.0 行为:
---
## 1. Binary 字符集 (1项)
| 功能 | SQL示例 | 错误信息 |
|------|---------|----------|
| CHARACTER SET binary | CREATE TABLE t (c VARCHAR(10) CHARACTER SET binary); | SQL parser error / unknown charset |
**替代方案**: 使用 VARBINARY 类型代替。
---
## 2. 国家字符集语法 (3项)
| 功能 | SQL示例 | 错误信息 |
|------|---------|----------|
| NCHAR | CREATE TABLE t (c NCHAR(10)); | SQL parser error |
| NATIONAL CHAR | CREATE TABLE t (c NATIONAL CHAR(10)); | SQL parser error |
| NATIONAL VARCHAR | CREATE TABLE t (c NATIONAL VARCHAR(10)); | SQL parser error |
**替代方案**: 使用 CHAR/VARCHAR CHARACTER SET utf8mb4。
---
## 3. 国家字符集字符串 (1项)
| 功能 | SQL示例 | 错误信息 |
|------|---------|----------|
| N'字符串' | SELECT N'中文测试'; | SQL parser error |
**替代方案**: 使用普通字符串 '中文测试'。
---
## 4. CAST 转字符集语法 (1项)
| 功能 | SQL示例 | 错误信息 |
|------|---------|----------|
| CAST AS CHAR CHARACTER SET | SELECT CAST('test' AS CHAR CHARACTER SET utf8mb4); | SQL parser error |
**替代方案**: 使用 CONVERT('test' USING utf8mb4)。
---
## 5. Charset Introducer (4项)
| 功能 | SQL示例 | 错误信息 |
|------|---------|----------|
| _utf8 | SELECT _utf8'test'; | not supported |
| _latin1 | SELECT _latin1'test'; | not supported |
| _gbk | SELECT _gbk'test'; | not supported |
| _big5 | SELECT _big5'test'; | not supported |
**替代方案**: 使用 _utf8mb4'test'(仅该变体支持)或 CONVERT() 函数。
---
## 6. 不同字符集字符串连接 (1项)
| 功能 | SQL示例 | 错误信息 |
|------|---------|----------|
| 不同字符集连接 | SELECT CONCAT(_utf8mb4'中文', _latin1'English'); | SQL parser error |
**替代方案**: 先用 CONVERT() 统一字符集后再连接。
---
## 7. LOAD DATA CHARACTER SET (1项)
| 功能 | SQL示例 | 错误信息 |
|------|---------|----------|
| LOAD DATA CHARACTER SET | LOAD DATA LOCAL INFILE '/tmp/file.csv' INTO TABLE t CHARACTER SET utf8mb4; | SQL parser error |
**替代方案**: 在 LOAD DATA 前执行 SET NAMES utf8mb4。
---
## 8. OCTET_LENGTH 函数 (1项)
| 功能 | SQL示例 | 错误信息 |
|------|---------|----------|
| OCTET_LENGTH() | SELECT OCTET_LENGTH('test'); | not supported: function 'octet_length' |
**替代方案**: 使用 LENGTH() 函数。
---
## 总结
**已支持**: utf8mb4, utf8, utf8mb3, gbk, latin1, ascii 等主流字符集,共41个字符集和对应的排序规则。
**不支持**: 13项字符集功能,主要为语法层面的兼容性问题,核心功能(数据存储、转换)已完整支持。
**建议优先级**:
- 高: NCHAR / NATIONAL CHAR 语法兼容
- 中: binary 字符集支持
- 中: CAST 字符集转换语法
- 中: _utf8 等主流字符集 Introducer
- 低: 其他功能已有良好替代方案
**总体评价**: MatrixOne v3.0 字符集兼容率达 95.3%,可满足绝大多数国际化应用需求。
Contributor guide
Assessment
This issue has not been assessed yet.