---
title: 如何把一个非字符类型的字段修改为 varchar 类型-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 如何把一个非字符类型的字段修改为 varchar 类型相关的常见问题和使用技巧，帮助您快速解决 如何把一个非字符类型的字段修改为 varchar 类型的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# 如何把一个非字符类型的字段修改为 varchar 类型

更新时间：2026-05-18 09:11

适用版本： V4.0.x、V4.1.x、V4.2.x 内容类型：TechNote  

ALTER TABLE MODIFY COLUMN 的操作不允许把一个非字符类型的字段修改为字符类型，会报如下错误。

```shell
ERROR 1235 (0A000): Alter non string type not supported

```

## 适用版本

OceanBase 数据库 V4.x 版本。

## 操作方法

一种变通的方法来把非字符类型的字段修改为字符类型。

该方法的思路如下：

1. 在表中新增 varchar 字段（col_new）。
 2. 用需要转换的字段（col_old）去更新 col_new。
 3. 删除 col_old。
 4. 更改字段名 col_old 为 col_new。 ​ MySQL 模式下的测试示例:

      1. 创建测试表。

        ```shell
        obclient [gtx]> create table t1 (c1 int,c2 varchar(100),c3 int, key t1_ix_c3(c3));
        Query OK, 0 rows affected (0.128 sec)

        ```
      2. 尝试把非字符类型的字段 c3 修改为 varchar。

        ```shell
        obclient [gtx]> alter table t1 modify column c3 varchar(100);
        ERROR 1235 (0A000): Not supported feature or function

        ```
      3. 添加一个新的 varchar 字段 c3_new。

        ```shell
        obclient [gtx]> alter table t1 add c3_new varchar(100);
        Query OK, 0 rows affected (0.091 sec)

        ```
      4. 用旧字段 c3 的值去更新新字段 c3_new。

        ```shell
        obclient [gtx]> update t1 set c3_new=c3;
        Query OK, 0 rows affected (0.028 sec)
        Rows matched: 0  Changed: 0  Warnings: 0

        ```
      5. 在删除旧字段 c3 前先要删除其上的索引。

        ```shell
        obclient [gtx]> alter table t1 drop column c3;
        ERROR 5071 (42000): Cannot alter index column

        ```

        ```shell
        obclient [gtx]> drop index t1_ix_c3 on t1;
        Query OK, 0 rows affected (0.051 sec)

        ```
      6. 删除旧字段。

        ```shell
        obclient [gtx]> alter table t1 drop column c3;
        Query OK, 0 rows affected (0.055 sec)

        ```
      7. 把新字段重命名为旧字段。

        ```shell
        obclient [gtx]> alter table t1 change column c3_new c3 varchar(100);
        Query OK, 0 rows affected (0.047 sec)

        ```
      8. 重建删除的索引。

        ```shell
        obclient [gtx]> create index t1_ix_c3 on t1 (c3);
        Query OK, 0 rows affected (0.564 sec)

        ```

        ```shell
        obclient [gtx]> desc t1;

        ```

        输出结果如下:

        ```shell
        +-------+--------------+------+-----+---------+-------+
        | Field | Type         | Null | Key | Default | Extra |
        +-------+--------------+------+-----+---------+-------+
        | c1    | int(11)      | YES  |     | NULL    |       |
        | c2    | varchar(100) | YES  |     | NULL    |       |
        | c3    | varchar(100) | YES  |     | NULL    |       |
        +-------+--------------+------+-----+---------+-------+

        ```

上一篇

[Oracle 模式下 NUMBER(*,0) 中的 * 的含义](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000532679)

下一篇

[number 类型字段 precision 和 scale 信息问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000246568) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
