That grammar is slightly out of date, which SQL standard did you consult?
In SQL:2023, the grammar is:
"""
<column definition> ::=
<column name> [ <data type or domain name> ]
[ <default clause> | <identity column specification> |
<generation clause>
| <system time period start column specification>
| <system time period end column specification> ]
[ <column constraint definition>... ]
[ <collate clause>
<data type or domain name> ::=
<data type>
| <domain name>
"""
and:
"""
<data type> ::=
<predefined type>
| <row type>
| <path-resolved user-defined type name>
| <reference type>
| <collection type>
<predefined type> ::=
<character string type> [ CHARACTER SET <character set specification> ]
[ <collate clause> ]
| <national character string type> [ <collate clause> ]
| <binary string type>
| <numeric type>
| <boolean type>
| <datetime type>
| <interval type>
| <JSON type>
"""
In any case, relevant rules from "11.4 <column definition>" are:
"""
12) Case:
a) If <column definition> immediately contains <domain name>, then it
shall not also immediately contain <collate clause>.
b) Otherwise, <collate clause> shall not be both specified in <data
type> and immediately contained in <column definition>. If <collate
clause> is immediately contained in <column definition>,then it is
equivalent to specifying an equivalent <collate clause> in <data type>.
"""
In other words, the standard does not allow the collate clause for
domains (we do), and for (pre-defined) data types, you are allowed to
specify the collate clause as part of the data type, or at the end of
the column definition, but not both.
Mark
--
Mark Rotteveel