【问题标题】:JOOQ MySQL TEXT DataTypeJOOQ MySQL TEXT 数据类型
【发布时间】:2019-02-28 17:45:08
【问题描述】:

我正在尝试使用 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 );

有什么提示吗?

【问题讨论】:

  • 使用此包中的SQLDataType import org.jooq.impl.SQLDataType;,例如SQLDataType.TEXT.nullable(false)
  • @AamirR SQLDataType 中没有字段 TEXT。见,jooq.org/javadoc/3.9.6/org/jooq/impl/SQLDataType.html
  • 你可以试试SQLDataType.CLOB,检查数据库中的结果数据类型,希望对你有帮助!
  • @AamirR 使用SQLDataType.CLOB 结果与预期的一样CREATE TABLE T (F text null); 所以这实际上解决了问题。因此,请更新您的答案,以便我接受。不过,有一件事困扰着我:如果我想要LONGTEXT 怎么办?如果我想要其他供应商特定类型怎么办?
  • 很高兴它有帮助,用新信息更新了我的答案

标签: mysql jooq


【解决方案1】:

正如documentation 所说

请改用对应的SQLDataType

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

来自 MySQL documentation

四种 TEXT (CLOB) 类型是 TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。它们的区别仅在于它们可以保存的值的最大长度。

如果您使用带有供应商特定长度的SQLDataType.CLOB(LENGTH),您将得到TINYTEXTMEDIUMTEXTLONGTEXT

注意 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-03
    • 2011-08-15
    • 2019-12-02
    • 2012-09-07
    • 2017-04-04
    • 2011-11-03
    • 2013-07-02
    • 2012-08-09
    相关资源
    最近更新 更多