Ein String ist eine Abfolge von Bytes oder Zeichen, die in
einfache (‘'
’) oder doppelte
Anführungszeichen (‘"
’) gesetzt
sind. Ein paar Beispiele:
'a string' "another string"
Wenn der SQL-Modus ANSI_QUOTES
aktiviert ist,
dürfen String-Literale nur in einfache Anführungszeichen
gesetzt werden. Ein in doppelten Anführungszeichen stehender
String wird als Bezeichner interpretiert.
Ein binärer String ist ein String, für den kein Zeichensatz und keine Sortierung definiert sind. Ein nichtbinärer String hingegen ist ein String, für den Zeichensatz und Sortierung definiert sind. Bei beiden String-Typen basieren Vergleiche auf den numerischen Werten der String-Einheit. Bei binären Strings ist dies das Byte, bei nichtbinären Strings das einzelne Zeichen (wobei zu beachten ist, dass manche Zeichensätze Zeichen enthalten, die aus mehreren Bytes bestehen).
String-Literale weisen unter Umständen eine optionale
Zeichensatzeinführung und eine
COLLATE
-Klausel auf:
[_charset_name
]'string
' [COLLATEcollation_name
]
Ein paar Beispiele:
SELECT _latin1'string
'; SELECT _latin1'string
' COLLATE latin1_danish_ci;
Weitere Informationen zu diesen Syntaxtypen für Strings finden Sie in Abschnitt 10.3.5, „Zeichensatz und Sortierfolge literaler Strings“.
Innerhalb eines Strings haben bestimmte Sequenzen jeweils eine
spezielle Bedeutung. Jede dieser Sequenzen beginnt mit einem
Backslash (‘\
’). Dieser wird
häufig als Escape-Zeichen bezeichnet.
MySQL erkennt die folgenden Escape-Sequenzen:
Diese Sequenzen unterscheiden die Groß-/Kleinschreibung. So
wird etwa ‘\b
’ als Rückschritt,
‘\B
’ hingegen als
‘B
’ interpretiert.
Das ASCII-Zeichen 26 kann als
‘\Z
’ kodiert werden; hierdurch
umgehen Sie Probleme mit der Tatsache, dass dieses Zeichen unter
Windows als Dateiende interpretiert wird. Das ASCII-Zeichen 26
verursacht in einer Datei Probleme, wenn Sie mysql
verwenden.
db_name
<
file_name
Die Sequenzen ‘\%
’ und
‘\_
’ erlauben die Suche nach
literalen Instanzen von ‘%
’ und
‘_
’ in Mustervergleichskontexten,
in denen sie andernfalls als Jokerzeichen interpretiert würden.
Details finden Sie in der Beschreibung zum Operator
LIKE
in
Abschnitt 12.3.1, „String-Vergleichsfunktionen“. Wenn Sie
‘\%
’ oder
‘\_
’ in Kontexten ohne
Mustervergleich verwenden, werden diese als Strings
‘\%
’ und
‘\_
’ und nicht als
‘%
’ und
‘_
’ ausgewertet.
Bei allen anderen Escape-Sequenzen wird der Backslash ignoriert.
Das bedeutet, dass das gekennzeichnete Zeichen als nicht
gekennzeichnetes interpretiert wird. So ist etwa
‘\x
’ identisch mit
‘x
’.
Es gibt mehrere Möglichkeiten, Anführungszeichen in einen String zu setzen:
Ein ‘'
’ in einem String, der
in ‘'
’ gesetzt ist, kann als
‘''
’ geschrieben werden.
Ein ‘"
’ in einem String, der
in ‘"
’ gesetzt ist, kann als
‘""
’ geschrieben werden.
Sie stellen dem Anführungszeichen ein Escape-Zeichen
(‘\
’) voran.
Ein ‘'
’ in einem String, der
in ‘"
’ gesetzt ist, erfordert
keine spezielle Behandlung und muss weder verdoppelt noch
mit einem Escape-Zeichen versehen werden. Ebenso erfordert
ein ‘"
’ in einem String, der
in ‘'
’ gesetzt ist, keine
Sonderbehandlung.
Die folgenden SELECT
-Anweisungen
veranschaulichen die Verwendung von Anführungs- und
Escape-Zeichen:
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 | +------------------------+
Wenn Sie Binärdaten in eine String-Spalte (z. B. eine
BLOB
-Spalte) einfügen wollen, müssen die
folgenden Zeichen durch Escape-Sequenzen dargestellt werden:
NUL |
NUL -Byte (ASCII 0). Dieses Zeichen wird mit
‘\0 ’ (einem Backslash
gefolgt vom Zeichen ASCII
‘0 ’) dargestellt. |
\ |
Backslash (ASCII 92). Stellen Sie dieses Zeichen als
‘\\ ’ dar. |
' |
Einfaches Anführungszeichen (ASCII 39). Stellen Sie dieses Zeichen als
‘\' ’ dar. |
" |
Doppeltes Anführungszeichen (ASCII 34). Stellen Sie dieses Zeichen als
‘\" ’ dar. |
Wenn Sie Anwendungsprogramme schreiben, muss jeder String, der eines dieser Sonderzeichen enthalten kann, korrekt gekennzeichnet werden, bevor er als Datenwert in einer SQL-Anweisung verwendet wird, die an den MySQL Server gesendet wird. Dies lässt sich auf zweierlei Weise realisieren:
Sie verarbeiten den String mit einer Funktion, die die
Sonderzeichen entsprechend kennzeichnet. In einem C-Programm
können Sie die C-API-Funktion
mysql_real_escape_string()
zur
Kennzeichnung von Sonderzeichen verwenden. Siehe auch
Abschnitt 24.2.3.52, „mysql_real_escape_string()
“. Die
Perl-DBI-Schnittstelle stellt eine Methode
quote
zur Konvertierung von Sonderzeichen
in die entsprechenden Escape-Sequenzen bereit. Siehe auch
Abschnitt 24.4, „MySQLs Perl-API“. Andere Spracheschnittstellen bieten
unter Umständen ähnliche Funktionalitäten.
Eine Alternative zur expliziten Kennzeichnung von Sonderzeichen stellt die Platzhalterfunktion dar, die von vielen MySQL-APIs geboten wird. Sie erlaubt Ihnen das Einfügen spezieller Markierungen in einen Anweisungs-String und das nachfolgende Binden der Datenwerte an diese Markierungen beim Absetzen der Anweisung. In diesem Fall nimmt Ihnen die API die Kennzeichnung der Sonderzeichen in den Werten ab.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.