COLLATE Clause in Various Parts of an SQL Query
COLLATE Clause Precedence
BINARY Operator
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:
_X and COLLATE Y were specified then the literal
character set is X and the literal collation is Y
_X is specified but COLLATE is not specified, then the
literal character set is X and the literal collation is X's default
collation
Examples:
latin1 character set and latin1_german1_ci
collation:
SELECT _latin1'Müller' COLLATE latin1_german1_ci;
latin1 character set and its default collation, that is,
latin1_swedish_ci:
SELECT _latin1'Müller';
SELECT 'Müller';
Character set introducers and the COLLATE clause are implemented
according to standard-SQL specifications.