10.3.5. Character String Literal Character Set and Collation
Every character string literal has a character set and a
collation.
A character string literal may have an optional character set
introducer and COLLATE
clause:
[_charset_name
]'string
' [COLLATE collation_name
]
Examples:
SELECT 'string
';
SELECT _latin1'string
';
SELECT _latin1'string
' COLLATE latin1_danish_ci;
For the simple statement SELECT
'string
'
, the string has
the character set and collation defined by the
character_set_connection
and
collation_connection
system variables.
The _charset_name
expression is formally called an
introducer. It tells the parser, “the
string that is about to follow uses character set
X
.” Because this has confused
people in the past, we emphasize that an introducer does not
cause any conversion; it is strictly a signal that does not
change the string's value. An introducer is also legal before
standard hex literal and numeric hex literal notation
(x'literal
'
and
0xnnnn
), and
before ?
(parameter substitution when using
prepared statements within a programming language interface).
Examples:
SELECT _latin1 x'AABBCC';
SELECT _latin1 0xAABBCC;
SELECT _latin1 ?;
MySQL determines a literal's character set and collation in the
following manner:
If both _X
and COLLATE
Y
were specified, then
character set X
and collation
Y
are used.
If _X
is specified but
COLLATE
is not specified, then character
set X
and its default collation
are used.
Otherwise, the character set and collation given by the
character_set_connection
and
collation_connection
system variables are
used.
Examples:
-
A string with latin1
character set and
latin1_german1_ci
collation:
SELECT _latin1'Müller' COLLATE latin1_german1_ci;
-
A string with latin1
character set and
its default collation (that is,
latin1_swedish_ci
):
SELECT _latin1'Müller';
-
A string with the connection default character set and
collation:
SELECT 'Müller';
Character set introducers and the COLLATE
clause are implemented according to standard SQL specifications.