2.3. Identifiers
All database objects have names, often called identifiers. Two types of names are valid as identifiers: regular names, similar to variable names in regular programming languages, and delimited names that are specific to SQL. To be valid, each type of identifier must conform to a set of rules, as follows:
2.3.1. Rules for Regular Object Identifiers
Length cannot exceed 31 characters
The name must start with an unaccented, 7-bit ASCII alphabetic character. It may be followed by other 7-bit ASCII letters, digits, underscores or dollar signs. No other characters, including spaces, are valid. The name is case-insensitive, meaning it can be declared and used in either upper or lower case. Thus, from the system’s point of view, the following names are the same:
|
fullname
|FULLNAME
|FuLlNaMe
|FullName
Regular name syntax
|
<name> ::=
| <letter> | <name><letter> | <name><digit> | <name>_ | <name>$
|
|<letter> ::= <upper letter> | <lower letter>
|
|<upper letter> ::= A | B | C | D | E | F | G | H | I | J | K | L | M |
| N | O | P | Q | R | S | T | U | V | W | X | Y | Z
|
|<lower letter> ::= a | b | c | d | e | f | g | h | i | j | k | l | m |
| n | o | p | q | r | s | t | u | v | w | x | y | z
|
|<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
2.3.2. Rules for Delimited Object Identifiers
Length cannot exceed 31 characters
The entire string must be enclosed in double-quotes, e.g.
"anIdentifier"
It may contain characters from any Latin character set, including accented characters, spaces and special characters
An identifier can be a reserved word
Delimited identifiers are case-sensitive in all contexts
Trailing spaces in delimited names are removed, as with any string constant
Delimited identifiers are available in Dialect 3 only. For more details on dialects, see Section 2.1.2, “SQL Dialects”
Delimited name syntax
|
<delimited name> ::= "<permitted_character>[<permitted_character> …]"
A delimited identifier such as "FULLNAME"
is the same as the regular identifiers FULLNAME
, fullname
, FullName
, and so on.
The reason is that Firebird stores all regular names in upper case, regardless of how they were defined or declared.
Delimited identifiers are always stored according to the exact case of their definition or declaration.
Thus, "FullName"
(quoted) is different from FullName
(unquoted, i.e., regular) which is stored as FULLNAME
in the metadata.