标识符样式
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
默认情况下,jOOQ 总是会为所有标识符生成带引号的名称(即使本手册为了便于阅读而省略了这一点)。
例如
SELECT "TABLE"."COLUMN" FROM "TABLE" -- SQL standard style SELECT `TABLE`.`COLUMN` FROM `TABLE` -- MySQL style SELECT [TABLE].[COLUMN] FROM [TABLE] -- SQL Server style
在大多数(但不是全部)数据库中,加引号对标识符有以下影响
- 它允许使用保留名称作为对象名称,例如,名为
"FROM"
的表通常只能在加引号时使用。 - 它允许在对象名称中使用特殊字符,例如,名为
"FIRST NAME"
的列只能通过加引号来实现。 - 它将大多不区分大小写的标识符变成区分大小写的标识符,例如,
"name"
和"NAME"
是不同的标识符,而name
和NAME
则不是。请查阅您的数据库手册,了解正确的默认大小写和默认区分大小写。
renderQuotedNames
和 renderNameCase
设置允许将 jOOQ 中所有标识符的名称覆盖为一致的样式。这两个标志彼此独立。可能的选项包括
RenderQuotedNames
-
ALWAYS
:这将引用所有标识符。 -
EXPLICIT_DEFAULT_QUOTED
:这将引用所有标识符,这些标识符未使用DSL.unquotedName()
显式取消引用。 -
EXPLICIT_DEFAULT_UNQUOTED
:这将不引用任何标识符,除非使用DSL.quotedName()
显式引用它们。 -
NEVER
:这将不引用任何标识符。
RenderNameCase
-
AS_IS
:这将以其正确的大小写生成所有名称。 -
LOWER
:这将把所有名称转换为小写。 -
LOWER_IF_UNQUOTED
:如果名称未加引号,这将把所有名称转换为小写。 -
UPPER
:这将把所有名称转换为大写。 -
UPPER_IF_UNQUOTED
:如果名称未加引号,这将把所有名称转换为大写。
在某些数据库产品中,带引号的标识符仅启用特殊字符。其他数据库产品也使用引号来使标识符区分大小写。在使用上述标志时,请记住这一点。
示例配置
Settings settings = new Settings() .withRenderQuotedNames(RenderQuotedNames.EXPLICIT_DEFAULT_UNQUOTED) // Defaults to EXPLICIT_DEFAULT_QUOTED .withRenderNameCase(RenderNameCase.LOWER_IF_UNQUOTED); // Defaults to AS_IS
此设置的行为受 renderLocale 设置的影响。
反馈
您对此页面有任何反馈吗?我们很乐意听到!