Announcement

Collapse
No announcement yet.

upper und Sonderzeichen (FB 1.53)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • upper und Sonderzeichen (FB 1.53)

    Eine Frage an die Profis,

    ich recherchiere gerade, weshalb es Probleme bei Case Insensitiver Suche gibt.

    Jetzt habe ich folgendes herausgefunden:

    select upper('amt für') from rdb$database ergibt:
    'AMT FüR' (man beachte - ein kleines ü...)

    select upper(name1) from adresse (steht Amt für ...) ergibt:

    'AMT FÜR ...' (man beachte - ein grosses Ü...)

    Also ergibt: where upper(name1) like upper('amt für%') Falsch

    Jetzt benutze ich aber die Filter von IBO. Kann ich ohne Eingriff in die Quellen da etwas machen?

    Danke, Frank

  • #2
    Hallo Frank,
    ob Umlaute bei einem UPPER korrekt dargestellt werden hängt damit zusammen, ob auf Feldebene oder im UPPER selbst, eine "Nicht-Ein-Byte-Collation" verwendet wird. Ein Blick durch meine Glaskugel sagt mir, dass Du für das Feld NAME1 in der Tabelle ADRESSE eine Collation DE_DE bei der Felddefinition verwendet hast, sofern Du mit dem ISO8859_1 Zeichensatz arbeitest. Soll ein Upper bei einer String-Konstante ebenfalls funktionieren, dann muss man hier explizit die Collation mitangegeben. Also, sofern Du einen Zeichensatz ISO8859_1 verwendest, sollte das Folgende klappen:
    <code>
    select * from rdb$database
    where 'AMT FÜR' = upper('amt für' COLLATE DE_DE)
    </code>
    Wohingegen Du für die folgende Abfrage keine Ergebnismenge zurückbekommst:
    <code>
    select * from rdb$database
    where 'AMT FÜR' = upper('amt für')
    </code>
    Ob das nun ohne Eingriff in den IBO-Sourcen geht, kann ich Dir nicht sagen.

    Tipp: In Firebird 2.0: Obige Anweisung, ohne dem COLLATE DE_DE gibt auch einen Datensätz zurück. In Firebird 2.0 wurde die ganze Internationalisierungsthematik komplett überarbeitet. Inkl. UPPER bei 1-Byte-Collations, viel besserer Unicode-Support, ...
    <br>
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Hallo Thomas,

      vielen Dank, es funktioniert.

      Ich habe jetzt erst mal die collate de_de in den Parser von IBO eingetragen:
      AExpr := 'UPPER( ' + AExpr + ' collate de_de)';

      Da ich in naher Zukunft auf FB2 umstellen werde, aollte es als vorübergehende Lösung reichen.

      Fran

      Comment

      Working...
      X