Skip to content

生成ddl的字段长度存在问题 #26

@sivdead

Description

@sivdead

重现步骤

1. 在mysql数据库中创建表

create table test
(
    nc char(100) charset utf8 null,
    nvc varchar(100) charset utf8 null,
    c char(100) null,
    vc varchar(100) null,
    i int(10) null,
    bi bigint null,
    si smallint null,
    ti tinyint null
)

2. 执行如下代码

    Dialect dialect = Dialect.MySQL8Dialect;
    // 获取连接
    Connection connection = getConnection();
    TableModel[] tableModels = TableModelUtils.db2Models(connection, dialect);
    TableModel tableModel = tableModels[0];
    String[] ddl = dialect .toCreateDDL(tableModel);
    System.out.println(ddl[0]);

输出如下:

create table test
( 
nc char(300),
nvc varchar(300),
c char(400),
vc varchar(400),
i integer,
bi bigint(0),
si smallint(0),
ti tinyint(0)
) engine=InnoDB;

可以看到字段的长度被放大了

原因

解析字段的时候使用了CHAR_OCTET_LENGTH作为columnLength,生成ddl的时候也是用的这个,但是实际上mysql很多字段使用的都是COLUMN_SIZE

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions