cayaphas: utf8_unicode_ci - "character equalities"

tach,

ich versuch mich gerade mit Zeichensätzen und Kollationen schlau zu machen um in einer mySQL Datenbank Ähnlichkeits- und Gleichheits-Suchen durchzuführen.

Ich die ganze Sache schon irgendwie verstanden, bleib aber an einem verständnisproblem hängen.

Also z.B. beim Zeichensatz utf8_unicode_ci (oder wäre hier der begriff kollation besser?) gibt es ja die sogenannten "character equalities", was die nette eigenschaft bringt bei mehrsprachigen Datenbankeinträgen "ähnliche Sonderzeichen" zu finden.. (e LIKE é).

Jetzt bin ich mir aber nicht sicher, wo diese Ähnlichkeiten definiert sind. Gibts dazu sowas wir Transformations-tables, gibts dazu nen Algorithmus diese aus irgendwelchen binären Daten zu gewinnen (gleichheiten im binären Zeichencode) oder ist das irgendwie ganz anders gelöst?

Ich google mich seit Stunden durchs Netz, wälz irgendwelche MySQL manual Seiten, bin aber noch nicht dahintergestiegen.

Letztlich würde ich nur gerne wissen welche Zeichen als "equal characters" angesehen werden.

Mir würds schon reichen, wenn ich wüsste nach was ich suchen muss.

gruss
caya

  1. echo $begrüßung;

    ich versuch mich gerade mit Zeichensätzen und Kollationen schlau zu machen um in einer mySQL Datenbank Ähnlichkeits- und Gleichheits-Suchen durchzuführen.

    Also z.B. beim Zeichensatz utf8_unicode_ci (oder wäre hier der begriff kollation besser?) gibt es ja die sogenannten "character equalities", was die nette eigenschaft bringt bei mehrsprachigen Datenbankeinträgen "ähnliche Sonderzeichen" zu finden.. (e LIKE é).

    Ein Zeichensatz ist eine Ansammlung von Zeichen, z.B. das Alphabet A-Z. Eine Zeichenkodierung ist eine Zuordnung der Zeichen zu einem Wert. Eine Kollation ist ein Satz Regeln zum Vergleichen von Zeichen in einem Zeichensatz.

    MySQL fasst unter dem Begriff character set die Ansammlung von Zeichen und deren Kodierung zusammen. Die Sortierregeln werden einem character set zugeordnet, da dies leichter handhabbar zu sein scheint. Sonst müsste man bei jedem Vergleichsvorgang erst alle Zeichen in eine globalgalaktische Tabelle einsortieren, um dann die Sortierregeln darauf anwenden zu können.

    Jetzt bin ich mir aber nicht sicher, wo diese Ähnlichkeiten definiert sind. Gibts dazu sowas wir Transformations-tables, gibts dazu nen Algorithmus diese aus irgendwelchen binären Daten zu gewinnen (gleichheiten im binären Zeichencode) oder ist das irgendwie ganz anders gelöst?

    Einige Hinweise stehen im Kapitel MySQL Localization and International Usage. Dateien, die sich mit Zeichensätzen und Kollationen beschäftigen findest du in den MySQL-Quellen unter sql/share/charsets und im Verzeichnis strings (ctype-...).

    echo "$verabschiedung $name";

    1. tach nochmal ...

      Ein Zeichensatz ist eine Ansammlung von Zeichen, z.B. das Alphabet A-Z. Eine Zeichenkodierung ist eine Zuordnung der Zeichen zu einem Wert. Eine Kollation ist ein Satz Regeln zum Vergleichen von Zeichen in einem Zeichensatz.

      ok .. aber genau dieser satz von regeln für eine bestimmte collation, existiert die als table für jede collation oder in welcher art und weise kann man diese regeln einsehen ?
      Überall findet man character set - tables zu sämtlichen collations, aber eine auflistung der Vergleichs-regeln finde ich nirgends.
      ich stell mir das im Moment so vor:
      e = é = è
      a = á = à
      etc.
      (lieg ich damit in etwa richtig, oder werden diese vergleichs regeln in einer anderen art und weise abgespeichert oder irgendwie aus dem binary code abgeleitet?)

      Bei mir dreht es sich speziell um die utf8_unicode - collation.

      Wie schon gesagt, ich würde gerne einsehen, welche characters als equal angesehen werden.

      gruss
      caya

      1. echo $begrüßung;

        Wie schon gesagt, ich würde gerne einsehen, welche characters als equal angesehen werden.

        Schau in den MySQL-Quelltext. In den strings/ctype-*.c-Dateien könntest du fündig werden. Im Handbuch gelistet habe ich diese Information noch nicht gesehen.

        echo "$verabschiedung $name";