首页 > 解决方案 > JOOQ MySQL TEXT 数据类型

问题描述

我正在尝试使用 JOOQ 生成这个简单的 SQL,但由于某种原因我无法完成它。

CREATE TABLE T (
    F TEXT
);

我希望它像

dsl.createTable(name("T"))
   .column("F", MySQLDataType.TEXT);

不幸的是,MySQLDataType已弃用 ( Do not reference this type directly from client code. Referencing this type before the SQLDataType class has been initialised may lead to deadlocks!)。所以我尝试了

dsl.createTable(name("T"))
   .column(field("F TEXT"));

但是我得到了以下 SQL,这是不合法的。

CREATE TABLE `T` (F text other null );

有什么提示吗?

标签: mysqljooq

解决方案


正如文件所说

请改用相应的SQLDataType

您可以.column("ColumnName", SQLDataType.CLOB)用于 MySQLTEXT数据类型。

来自 MySQL文档

四种 TEXT (CLOB)类型是 TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。这些仅在它们可以保存的值的最大长度上有所不同。

如果您使用SQLDataType.CLOB(LENGTH)供应商特定的长度,您将得到TINYTEXT, MEDIUMTEXT,LONGTEXT

请注意,MySQL 指CLOB的是TEXT

使用示例

SQLDataType.INTEGER.identity(true)        // INTEGER Primary key
SQLDataType.VARCHAR(4095).nullable(false) // VARCHAR(4095) NOT NULL
SQLDataType.CHAR(10)                      // CHAR(10)
SQLDataType.BLOB                          // BLOB
SQLDataType.CLOB)                         // TEXT, same as blob, but with character encoding associated
SQLDataType.CLOB(16777215)                // MEDIUMTEXT
SQLDataType.CLOB(4294967295)              // LONGTEXT

推荐阅读