mySql: maskierung von backslash
steckl
- datenbank
hallo,
bisher war ich immer der meinung, dass man einen \ (backslash) immer mit einem backslash davor maskieren muss. Aber in der where-Klausel mit like scheint das nicht so zu sein.
kann mir jemand folgendes Verhalten erklaeren:
mysql> desc tabOne;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | | PRI | NULL | auto_increment |
| txt | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
mysql> select id,txt from tabOne where txt like 'test\\\\\\eins';
+----+------------+
| id | txt |
+----+------------+
| 4 | test\eins |
+----+------------+
mysql> select id,txt from tabOne where txt like 'test\\\\eins';
+----+------------+
| id | txt |
+----+------------+
| 4 | test\eins |
+----+------------+
1 row in set (0.00 sec)
mysql> select id,txt from tabOne where txt like 'test\\\\eins';
+----+-----------+
| id | txt |
+----+-----------+
| 2 | test\eins |
| 3 | test\eins |
+----+-----------+
mysql> select id,txt from tabOne where txt like 'test\\eins';
+----+----------+
| id | txt |
+----+----------+
| 1 | testeins |
+----+----------+
wenn ich stattdessen "=" anstatt "like" schreibe verhaelt es sich ganz normal (mit backslash maskiert durch einfachen backslash):
mysql> select id,txt from tabOne where txt='test\eins';
+----+-----------+
| id | txt |
+----+-----------+
| 2 | test\eins |
| 3 | test\eins |
+----+-----------+
koennte mir jemand sagen, wann ich wieviele backslashs zum maskieren brauche?
mfG,
steckl
Ich grüsse den Cosmos,
koennte mir jemand sagen, wann ich wieviele backslashs zum maskieren brauche?
LIKE kann RegExp, daher hat ein Backslash eine etwas andere Wirkung.
Möge das "Self" mit euch sein
hi,
koennte mir jemand sagen, wann ich wieviele backslashs zum maskieren brauche?
LIKE kann RegExp, daher hat ein Backslash eine etwas andere Wirkung.
wertet LIKE audruecke zwischen 2 (beliebigen) Sonderzeichen als regulaeren ausdruck? gibts da eine feste syntax, damit ich backslashs immer gleich maskieren kann, weil ich erzeuge die querys mit perl und muss dort den backslash nach irgendeinem schema maskieren. das wollt ich eigentlich so machen:
s/\/\\/g
aber das klappt ja nicht :(
mfG,
steckl
echo $begrüßung;
koennte mir jemand sagen, wann ich wieviele backslashs zum maskieren brauche?
Das Handbuchkapitel String Comparison Functions gibt in einer "Note:" Auskunft über das Backslash-"Phänomen".
LIKE kann RegExp, daher hat ein Backslash eine etwas andere Wirkung.
Diese Aussage ist nicht richtig. Für Reguläre Ausdrücke braucht es entweder REGEXP oder RLIKE.
echo "$verabschiedung $name";
morgen
koennte mir jemand sagen, wann ich wieviele backslashs zum maskieren brauche?
Das Handbuchkapitel String Comparison Functions gibt in einer "Note:" Auskunft über das Backslash-"Phänomen".
danke, der link war sehr aufschlussreich.
ich mach jetzt einfach
$string =~ s/\/\\\\/g; # replace backslash with four backslashs
so scheint es zu klappen :)
Gibt es noch andere faelle (ausser das mit den regulaeren Ausdruecken) bei denen ich aufpassen muss?
mfG,
steckl