A string is a sequence of bytes or characters, enclosed within
either single quote (‘'
’) or
double quote (‘"
’) characters.
Examples:
'a string'
"another string"
If the ANSI_QUOTES
SQL mode is enabled,
string literals can be quoted only within single quotes. A
string quoted within double quotes is interpreted as an
identifier.
A binary string is a string of bytes that
has no character set or collation. A non-binary
string is a string of characters that has a
character set and collation. For both types of strings,
comparisons are based on the numeric values of the string unit.
For binary strings, the unit is the byte. For non-binary strings
the unit is the character and some character sets allow
multi-byte characters.
String literals may have an optional character set introducer
and COLLATE
clause:
[_charset_name
]'string
' [COLLATE collation_name
]
Examples:
SELECT _latin1'string
';
SELECT _latin1'string
' COLLATE latin1_danish_ci;
For more information about these forms of string syntax, see
Section 10.3.5, “Character String Literal Character Set and Collation”.
Within a string, certain sequences have special meaning. Each of
these sequences begins with a backslash
(‘\
’), known as the
escape character. MySQL recognizes the
following escape sequences:
These sequences are case sensitive. For example,
‘\b
’ is interpreted as a
backspace, but ‘\B
’ is
interpreted as ‘B
’.
The ASCII 26 character can be encoded as
‘\Z
’ to enable you to work around
the problem that ASCII 26 stands for END-OF-FILE on Windows.
ASCII 26 within a file causes problems if you try to use
mysql db_name
<
file_name
.
The ‘\%
’ and
‘\_
’ sequences are used to search
for literal instances of ‘%
’ and
‘_
’ in pattern-matching contexts
where they would otherwise be interpreted as wildcard
characters. See the description of the LIKE
operator in Section 12.3.1, “String Comparison Functions”. If
you use ‘\%
’ or
‘\_
’ in non-pattern-matching
contexts, they evaluate to the strings
‘\%
’ and
‘\_
’, not to
‘%
’ and
‘_
’.
For all other escape sequences, backslash is ignored. That is,
the escaped character is interpreted as if it was not escaped.
For example, ‘\x
’ is just
‘x
’.
There are several ways to include quote characters within a
string:
A ‘'
’ inside a string quoted
with ‘'
’ may be written as
‘''
’.
A ‘"
’ inside a string quoted
with ‘"
’ may be written as
‘""
’.
Precede the quote character by an escape character
(‘\
’).
A ‘'
’ inside a string quoted
with ‘"
’ needs no special
treatment and need not be doubled or escaped. In the same
way, ‘"
’ inside a string
quoted with ‘'
’ needs no
special treatment.
The following SELECT
statements demonstrate
how quoting and escaping work:
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+
mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
+-------+---------+-----------+--------+--------+
| hello | 'hello' | ''hello'' | hel"lo | "hello |
+-------+---------+-----------+--------+--------+
mysql> SELECT 'This\nIs\nFour\nLines';
+--------------------+
| This
Is
Four
Lines |
+--------------------+
mysql> SELECT 'disappearing\ backslash';
+------------------------+
| disappearing backslash |
+------------------------+
If you want to insert binary data into a string column (such as
a BLOB
column), the following characters must
be represented by escape sequences:
When writing application programs, any string that might contain
any of these special characters must be properly escaped before
the string is used as a data value in an SQL statement that is
sent to the MySQL server. You can do this in two ways:
Process the string with a function that escapes the special
characters. In a C program, you can use the
mysql_real_escape_string()
C API function
to escape characters. See
Section 25.2.3.52, “mysql_real_escape_string()
”. The Perl DBI
interface provides a quote
method to
convert special characters to the proper escape sequences.
See Section 25.4, “MySQL Perl API”. Other language interfaces may
provide a similar capability.
As an alternative to explicitly escaping special characters,
many MySQL APIs provide a placeholder capability that
enables you to insert special markers into a statement
string, and then bind data values to them when you issue the
statement. In this case, the API takes care of escaping
special characters in the values for you.