JOOQ MySQL TEXT DataType - PullRequest
       10

JOOQ MySQL TEXT DataType

0 голосов
/ 28 февраля 2019

Я пытаюсь сгенерировать этот простой SQL с помощью JOOQ, и по какой-то причине я не могу это сделать.

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 );

Есть какие-нибудь подсказки?

1 Ответ

0 голосов
/ 28 февраля 2019

Как указано в документации

Вместо этого используйте соответствующий SQLDataType .

Вы можете использовать .column("ColumnName", SQLDataType.CLOB) дляMySQL TEXT тип данных.

Из документации MySQL

Четыре типа TEXT (CLOB) : TINYTEXT, TEXT, MEDIUMTEXT,и ДОЛГО ТЕКСТ.Они отличаются только максимальной длиной значений, которые они могут содержать.

Если вы используете 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
...