Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] case sensitivity innodb pdo ?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] case sensitivity innodb pdo ?

    Hi

    Diese Abfrage
    Code:
    $sql = "SELECT id, product_code,descr_short,descr_long,price_net FROM ".$catalogue_table." WHERE CONCAT(product_code,descr_long,price_net) LIKE ?";
    funktioniert lokal case insensitive und auf dem Webspace von 1und1 nur case sensitive. Hat jemand eine Ahnung wie das sein kann?

    Weitere Infos:

    Lokal:
    Win 7, PHP 5.5.9,
    MySQL Version 5.6.16, version_compile os Win32, protocol version 10

    1und1:
    Linux ?, PHP 5.5.12,
    MySQL Version 5.1.73-log, version_compile os pc-linux-gnu, protocol version 10

    Die DB wurde, da sie noch sehr klein ist, per Copy & Paste (SQL - Export per phpMyAdmin) zu 1und1 rüberkopiert. Die Tabellen sind also auf beiden Seiten innoDB case insensitive eingestellt. Die PDO Verbindungseinstellungen sind identisch.
    Es ist schon alles gesagt. Nur noch nicht von allen.


  • #2
    Hi,

    http://dev.mysql.com/doc/refman/5.1/...nsitivity.html

    mfg wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      @wolf29: Vielen Dank. Jedoch...das sieht zwar auf den ersten Blick so aus als hätte es etwas mit meinem Problem zu tun, tut es aber nicht. Der Artikel besagt ja, dass MySQL Datenbanken und Tabellen als Dateien im Dateisystem des jeweiligen Betriebssystems vorliegen und entsprechend die "case sensitivity" - Regeln gelten.

      Bei mir geht es aber darum, dass lokal die Abfrage
      Code:
      ...LIKE '%dvp%'
      auch alle Datensätze mit "DVP" zurückgibt, während bei 1und1 explizit
      Code:
      ...LIKE '%DVP%'
      abgefragt werden muss. Und das hat ja nichts mit Tabellennamen zu tun, oder.

      Davon ab, trifft das Problem auch nur für diese Produkttabelle zu. Bei allen anderen habe ich diese dummen case sensitivity Probleme nicht.
      Es ist schon alles gesagt. Nur noch nicht von allen.

      Kommentar


      • #4
        Hast du den Zeichensatz im Feld/in der Tabelle überprüft? utf8_unicode_ci wäre z.B. case insensitive (Siehe: "_ci").

        Kommentar


        • #5
          Zitat von Chris. Beitrag anzeigen
          Hast du den Zeichensatz im Feld/in der Tabelle überprüft? utf8_unicode_ci wäre z.B. case insensitive (Siehe: "_ci").
          Ja, habe ich, sind alle utf8_general_ci.

          Ich kopiere die Tabelle von lokal zum 1und1 Server und dort wird das ci einfach ignoriert??
          Es ist schon alles gesagt. Nur noch nicht von allen.

          Kommentar


          • #6
            Es kann gut sein, dass CONCAT() die den verwendeten Zeichensatz verändert. Versuche an den Query "COLLATE utf8_general_ci" anzuhängen.

            Kommentar


            • #7
              Ich habe eine weitere Erkenntnis gewonnen. Es scheint am CONCAT zu liegen, denn wenn ich statt

              Code:
              $sql = "SELECT id, product_code,descr_short,descr_long,price_net FROM ".$catalogue_table." WHERE CONCAT(product_code,descr_long,price_net) LIKE ?";
              folgendes schreibe

              Code:
              $sql = "SELECT id, product_code,descr_short,descr_long,price_net FROM ".$catalogue_table." WHERE descr_long LIKE ?";
              kann ich case insensitive abfragen.
              Es ist schon alles gesagt. Nur noch nicht von allen.

              Kommentar


              • #8
                OK, hab's gelöst. So geht es:

                Code:
                SELECT id, product_code,descr_short,descr_long,price_net FROM products_1 WHERE CONCAT(product_code,descr_long,price_net) LIKE '%dvp%' COLLATE utf8_general_ci
                Man beachte das COLLATE am Schluß.

                Und dies ist der entscheidende Hinweis, den ich im Zs.hang mit CONCAT gefunden habe.
                MySQL's CONCAT statement will use the system default for collations. If your table is defined as UTF-8 but your system is latin1 then your LIKE statement may choose a case-sensitive collation.
                Letztlich ist also auch hier das Betriebssystem ausschlaggebend.
                Es ist schon alles gesagt. Nur noch nicht von allen.

                Kommentar


                • #9
                  @Chris.: Hat sich überschnitten. Du hast völlig Recht. Danke!
                  Es ist schon alles gesagt. Nur noch nicht von allen.

                  Kommentar


                  • #10
                    Noch ein kleiner Nachtrag. Da ich in anderen Tabellen nicht das Problem mit CONCAT habe, habe ich nochmal nachgesehen, woran das wohl liegen kann.

                    Die Antwort: Im Problemfall werden VARCHARs mit einem DOUBLE Feld verkettet. Entferne ich das DOUBLE Feld aus der Verkettung, ist die COLLATE Anweisung dann auch nicht mehr notwendig.

                    Man lernt nie aus. Und ich schon gar nicht...
                    Es ist schon alles gesagt. Nur noch nicht von allen.

                    Kommentar

                    Lädt...
                    X