首批通过分布式安全可靠测评,为关键业务系统打造
执行 DDL 报错 ERROR 1235,不支持更改字符集或字符序
更新时间:2026-05-18 09:11
适用版本
OceanBase 数据库 V2.x、V3.x 版本。
问题现象
MySQL 租户中执行以下 SQL 报错 Alter charset or collation type not supported。
obclient [test]> ALTER TABLE tb_test1 MODIFY COLUMN err_code varchar(200) COMMENT '错误码';
ERROR 1235 (0A000): Alter charset or collation type not supported
问题原因
OceanBase 数据库不支持在线修改表的字符集、字符序。如:不支持 utf8mb4_general_ci -> utf8mb4_bin 的转换。
表 tb_test1 的 DDL 定义如下。
CREATE DATABASE `xxxxxx`
DEFAULT CHARACTER SET = utf8mb4
DEFAULT COLLATE = utf8mb4_bin;
CREATE TABLE tb_test1 (
`id` varchar(32) CHARACTER SET utf8mb4 NOT NULL COMMENT 'id',
`err_code` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '平台错误码',
PRIMARY KEY (`id`) )
DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_bin;
表 tb_test1 定义时指定了表的字符集和字符序,字段的定义中也指定了字符集,但没有指定字符序,字段的字符序属性使用该字符集默认的字符序。字符集 utf8mb4 的默认字符序是 utf8mb4_general_ci。
obclient [oceanbase]> select tenant_id,column_id,column_name,collation_type
from __all_virtual_column where tenant_id=1001 and table_id =1100611139454137;
+-----------+-----------+-------------+----------------+
| tenant_id | column_id | column_name | collation_type |
+-----------+-----------+-------------+----------------+
| 1001 | 16 | id | 45 |
| 1001 | 17 | err_code | 45 |
+-----------+-----------+-------------+----------------+
2 rows in set (0.011 sec)
在执行 ALTER TABLE MODIFY COLUMN 操作时,因为没有指定字段的字符集和字符序列,默认使用表级别的字符集和字符序,在本示例中即 charset=utf8mb4 collation=utf8mb4_bin,因此与原本的字符序定义不一致。
解决方法
在 ALTER 语句中显示指定 COLUMN 的 CHARACTER SET 和 COLLATE。
obclient [test]> ALTER TABLE tb_test1 MODIFY COLUMN err_code varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '错误码';
Query OK, 0 rows affected (0.14 sec)