Every character string literal has a character set and a collation, which may not be null.
A character string literal may have an optional character set introducer and COLLATE clause:
[_character_set_name]'string' [COLLATE collation_name]
Examples:
SELECT 'string'; SELECT _latin1'string'; SELECT _latin1'string' COLLATE latin1_danish_ci;
The simple statement SELECT 'string' uses the connection/literal character set.
The _character_set_name expression is formally called an introducer. It tells the parser, ``the string that is about to follow is in 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 thus:
If both _X and COLLATE Y were specified then the literal character set is X and the literal collation is Y
If _X is specified but COLLATE is not specified, then the literal character set is X and the literal collation is X's default collation
Otherwise, the connection/literals character set and collation.
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/literals character set and collation:
SELECT 'Müller';
Character set introducers and the COLLATE clause are implemented according to standard-SQL specifications.