Thomaier: Umlaute bei INSERT INTO von Vokalen unterscheiden

Hallo,
ich möchte eine Reihe von Wörtern in eine Tabelle einfügen, die aus einem ID (Auto-Increment, Primary, INT(4)) und einem Feld "word" für das Wort (VARCHAR(20) besteht. "word" hat einen "unique"-Schlüssel. Kodierung der Tabelle ist utf8_general_ Version MySQL 5.0.

Beim Einlesen der Werte per PHP werden mir nun Fehlermeldungen ("Eintrag bereits vorhanden") bei jenen Einträgen ausgegeben, die Umlaute enthalten und wo ähnliche Wörter ohne Umlaute vorhanden sind, z.B. "drucken" und "drücken".

Ich habe nach einer Möglichkeit der Unterscheidung gesucht, vergleich zu "BINARY" bei WHERE-Causes, aber nichts gefunden. Auch ein entsprechender Versucht hat nur Fehler erzeugt. Gibt es eine Möglichkeit, die Wörter trotz unique-Key zu speichern?

Danke
Thomas

  1. Hi,

    "word" hat einen "unique"-Schlüssel. Kodierung der Tabelle ist utf8_general_

    utf8_general_*was?
    Und welche ggf. abweichende Collation hat die Spalte selber?

    Beim Einlesen der Werte per PHP werden mir nun Fehlermeldungen ("Eintrag bereits vorhanden") bei jenen Einträgen ausgegeben, die Umlaute enthalten und wo ähnliche Wörter ohne Umlaute vorhanden sind, z.B. "drucken" und "drücken".

    Ich habe nach einer Möglichkeit der Unterscheidung gesucht, vergleich zu "BINARY" bei WHERE-Causes, aber nichts gefunden. Auch ein entsprechender Versucht hat nur Fehler erzeugt. Gibt es eine Möglichkeit, die Wörter trotz unique-Key zu speichern?

    Wähle eine Collation, in der verschiedene Buchstaben nicht als gleichwertig beim Vergleichen behandelt werden.
    utf8_bin sollte definitiv ausschliessen, dass irgendwelche zwei Zeichen gleich behandelt werden.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hello,

      Wähle eine Collation, in der verschiedene Buchstaben nicht als gleichwertig beim Vergleichen behandelt werden.
      utf8_bin sollte definitiv ausschliessen, dass irgendwelche zwei Zeichen gleich behandelt werden.

      Da wird ihm vermutlich nur VARBINARY als Spaltentyp bleiben. Der hat dann automatisch die native Collation (binary) und unterscheidet auch Umlaute vom jeweiligen Stammlaut.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi!

        utf8_bin sollte definitiv ausschliessen, dass irgendwelche zwei Zeichen gleich behandelt werden.
        Da wird ihm vermutlich nur VARBINARY als Spaltentyp bleiben. Der hat dann automatisch die native Collation (binary) und unterscheidet auch Umlaute vom jeweiligen Stammlaut.

        Falsch vermutet. Zum einen ist utf8_bin sehr wohl für VARCHAR (und TEXT) erhältlich. Zum anderen will man VARBINARY nicht für Text nehmen, weil das nur auf Bytes orientiert ist. Das kennt so etwas wie "Zeichen" nicht geschweige denn Umlaute oder gar Mehrbyte-Kodierungen.

        Lo!

    2. Hi!

      "word" hat einen "unique"-Schlüssel. Kodierung der Tabelle ist utf8_general_
      utf8_general_*was?

      Für utf8 gibt es nur utf8_*_ci (mit der Ausnahme utf8_bin).

      Lo!

    3. Hallo,

      utf8_general_*was?
      Und welche ggf. abweichende Collation hat die Spalte selber?

      Da ich viel mit Wortdatenbanken und verschiedenen Sprachen arbeite, haben alle Tabellen und Spalten eine utf8_general_ci-Collation. Das fehlende "ci" muss mir einfach beim Schreiben verrutscht sein.

      Wähle eine Collation, in der verschiedene Buchstaben nicht als gleichwertig beim Vergleichen behandelt werden.
      utf8_bin sollte definitiv ausschliessen, dass irgendwelche zwei Zeichen gleich behandelt werden.

      Das habe ich gemacht und es funktioniert. Vielen Dank für den Hinweis!

      Gruß
      Thomaier