jooq - select 删除 cast 的 varchar 长度信息

jooq - select removes varchar length information of cast

调用此代码时

DSLContext dslContext = DSL.using(SQLDialect.SQLSERVER);
dslContext.select(DSL.cast(field, SQLDataType.VARCHAR.length(255)));

select语句删除了varchar长度的信息。 DSL.cast() 方法 returns cast("fieldName" as varchar(255)) 和 select returns select cast("fieldName" as varchar).

问题在于,在 SQLServer 中,没有长度信息的转换会在 here 描述的 30 个字符后截断结果。这非常烦人,因为我的值超过 30 个字符长。那么有没有人知道我怎样才能得到一个看起来像这样 select cast("fieldName" as varchar(255)) 的 select 语句?

关于 DataType were introduced only in jOOQ 3.0, although that information was not used in CAST() expressions until jOOQ 3.2 (issue #2708 的长度、精度和比例信息:

最新版本的 jOOQ 正确呈现

cast([fieldName] as varchar(255))

所以,我建议升级到最新版本。

此外,如果您的版本/用法生成 cast("fieldName" as varchar),我怀疑您也可能传递了错误的 SQLDialect(而不是 SQLSERVER)。使用 SQLSERVER 方言,标识符是使用 [brackets] 生成的,这与其他使用 "double quotes" 作为标识符的方言不同...