Announcement

Collapse
No announcement yet.

Bei Abfrage werden Umlaute nicht gefunde

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

  • Bei Abfrage werden Umlaute nicht gefunde

    hallo,

    bei einer abfrage einer datenbank, in der umlaute problemlos gespeichert werden können, werden keine ergebnisse gefunden. benutzt wird der zeichensatz ISO8859_1, die abfrage wird mit z.b. "...where upper(ort) like '%mün%'..." gesetzt um münchen zu finden. da in der datenbank definitiv einträge vorhanden sind und mit der ibconsole diese auch gefunden werden, könnte mir vielleicht jemand sagen, wie ich das problem beheben kann ???

    hartmut

  • #2
    Hallo Hartmut,

    ich geh mal davon aus, dass Du im OrignalCode statt "...where upper(ort) like '%mün%'..." eher das steht "...where upper(ort) like '%<b>MÜN</b>%'...".

    Wichtig ist, das der Zeichensatz der entsprechenden Tabellenspalte mit dem Zeichensatz übereinstimmt den Du bei Deinem Datenbankzugriff verwendest. Falls der Tabellenspalte kein eigener Zeichensatz zugewiesen wurde, dann muß der globale Zeichensatz entsprechen passen.

    Tschüß

    Torste

    Comment


    • #3
      hallo torsten,

      ja, das eingabefeld nimmt natürlich nur "upper"-buchstaben an, so dass das gewährleistet ist. aber die spalte ist entsprechend - wie die ganze datenbank auch - mit dem characterset iso8859_1 "markiert". daran kann's also nicht liegen...

      hartmu

      Comment


      • #4
        Hallo Hartmut,

        meldest Du Dich auch mit dem richtigen Zeichensatz an der DB an?

        Wird bei einem Select Upper(ort) from ... richtig in Großbuchstaben umgewandelt?

        Tschüß

        Torste

        Comment


        • #5
          hallo torsten,

          ja alles geprüft und getestet - ich hab' keine idee mehr. der zeichensatz stimmt, die umwandlung arbeitet einwandfrei und - wie bereits beschrieben - in der ibconsole funktioniert die abfrage....

          hartmut (mittlerweile verzweifelt - das kann doch nicht sein...

          Comment


          • #6
            hallo torsten,

            ok - frust ein wenig beendet. nach einem umfangreichem versuch mit der upper-funktion, scheint es einen kleinen bug zu geben: umlaute werden scheinbar nicht in grossbuchstaben umgewandelt. ich habe mir bisher noch nicht die mühe gemacht, woran es liegen kann - für den benutzer ist es natürlich traurig, denn der muss jetzt wieder auf gross- u. kleinschreibung achten. bequemlichkeit vorerst ad.

            hartmu

            Comment


            • #7
              Hallo Hartmut,

              da stimmt irgend ein Zeichensatz nicht. Schick mir mal ein Script Deiner DB (email-Adresse siehst Du durch einen Click auf meinen Namen).

              Tschüß

              Torste

              Comment


              • #8
                Hallo,

                in meinem Buch <i>InterBase-Datenbankentwicklung mit Delphi</i> stelle ich eine eigene mit Delphi geschriebene UDF-DLL vor, in der u.a. die eigenen Funktionen <b>OSUPPER</b> und <b>OSLOWER</b> implementiert werden. Diese beiden Funktionen greifen auf die Win32-API-Funktion <b>AnsiUpperCase</b> bzw. <b>AnsiLowerCase</b> zu, so dass die deutschen Umlaute korrekt berücksichtigt werden.

                Der InterBase hat seine Wurzeln in der englischen Sprachwelt - die anderen Zeichensätze wurden erst später drumrumgebaut, so dass viele interne Funktione (wie UPPER) nicht mit den deutschen Umlauten hantieren können

                Comment


                • #9
                  Hallo Andreas,

                  die Funktion upper konvertiert auch deutsche Umlaute richtig, allerdings müssen die richtigen Zeichensätze an allen relvanten Stellen verwendet werden und zusätzlich die Spalten mit Collate DE_DE versehen sein.

                  Also z.B. <b><pre>CREATE TABLE T1 (
                  ID INTEGER,
                  NAME VARCHAR(10) CHARACTER SET ISO8859_1 collate de_de);

                  </b>
                  oder wenn bereits der Default Zeichensatz festgelegt wurde geht auch
                  <b>
                  CREATE TABLE T1 (
                  ID INTEGER,
                  NAME VARCHAR(10) collate de_de);
                  </b></pre>

                  Tschüß

                  Torste

                  Comment

                  Working...
                  X