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

  • drsoong
    hat ein Thema erstellt [Erledigt] case sensitivity innodb pdo ?.

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

  • drsoong
    antwortet
    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...

    Einen Kommentar schreiben:


  • drsoong
    antwortet
    @Chris.: Hat sich überschnitten. Du hast völlig Recht. Danke!

    Einen Kommentar schreiben:


  • drsoong
    antwortet
    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.

    Einen Kommentar schreiben:


  • drsoong
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • drsoong
    antwortet
    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??

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • drsoong
    antwortet
    @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.

    Einen Kommentar schreiben:


  • wolf29
    antwortet
    Hi,

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

    mfg wolf29

    Einen Kommentar schreiben:

Lädt...
X