bobby: MySQL unterschiedliche Zeichen werden gleich interpretiert

Moin,

Folgendes Problem.

ich habe in der Datenbank folgende 2 Datensätze

Name | Fremdschluessel Alarò | 44 Alaro | NULL

ich habe einen UNIQUE auf Name+Fremdschlüssel. Ich möchte dem 2. Datensatz jetzt ebenfalls den Fremdschlüssel 44 zuweisen. Ich bekomme aber die Meldung dass dies mit dem vorherigen DAtensatz aufgrund des Unique kollidiert.

Siche ich in den Daten mit

SELECT * from Table where name Like 'Alaro'

werden mir beide Datensätze ausgegeben. Ich hab e die Verbindung und die Datensätze als UTF8 deklariert. Was mache ich falsch, bzw wie kann ich erreichen, dass die DAtensätze als 2 verschiedene anerkannt werden?

Gruß Bobby

--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <- ### Henry L. Mencken ### -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <- ### Viktor Frankl ### ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)

akzeptierte Antworten

  1. Moin,

    Kollation auf utf8_bin geändert, und schon funktioniert es.

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <- ### Henry L. Mencken ### -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <- ### Viktor Frankl ### ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  2. Tach!

    ich habe in der Datenbank folgende 2 Datensätze

    Name | Fremdschluessel Alarò | 44 Alaro | NULL

    ich habe einen UNIQUE auf Name+Fremdschlüssel. Ich möchte dem 2. Datensatz jetzt ebenfalls den Fremdschlüssel 44 zuweisen. Ich bekomme aber die Meldung dass dies mit dem vorherigen DAtensatz aufgrund des Unique kollidiert.

    Für Vergleiche wird die Kollation berücksichtigt.

    Suche ich in den Daten mit

    SELECT * from Table where name Like 'Alaro'
    

    werden mir beide Datensätze ausgegeben.

    Auch das ist ein Problem mit der Kollation.

    Ich hab e die Verbindung und die Datensätze als UTF8 deklariert. Was mache ich falsch, bzw wie kann ich erreichen, dass die DAtensätze als 2 verschiedene anerkannt werden?

    Die Zeichenkodierung ist nicht die Verantwortliche. Die muss nur stimmen, damit MySQL die richtigen Zeichen interpretieren kann. Für Vergleiche ist dann wie schon erwähnt die Kollation zuständig. Nicht nur Zeichen mit und ohne Diakritika, auch foo und FOO werden beispielsweise in einigen Kollationen als gleich angesehen. Für exakte Vergleiche muss man eine Binärkollation nehmen, also utf8_bin in deinem Fall.

    dedlfix.

  3. Es liegt an der Collation. Setze die Collation auf utf8_binary. Dann wird aber auch zwischen Alarò und alarò unterschieden.