steckl: mySql: maskierung von backslash

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

  1. 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

    --
    Ich bin keine Signatur, ich fülle nur diesen leeren Platz mit sinnlosen Worten
    1. 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

    2. 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";

      1. 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