thomas123: MySQL UNIQUE mit Funtion

Hallo,

ich habe eine Tabelle in der der Username eindeutig sein soll. Groß- Kleinschreibung soll dabei allerdings keine Rolle spielen.

Ich habe folgendes versucht. Leider hat es nicht funktiniert.

CREATE TABLE users (
user\_id INT( 9 ) NOT NULL AUTO_INCREMENT ,
username VARCHAR( 32 ) NOT NULL ,
PRIMARY KEY ( user\_id ) ,
UNIQUE (
lower(username)
)
);

In dem Unique key kann ich keine "lower" oder "lcase" funktion verwenden. meine 2. überlegung währ, einfach alles mit lower in die datenbank zu schreiben. die usernamen sollen allerdings auch mit großbuchstaben reingeschrieben werden.

dieses problem würde ich gerne auf datenbankebene lösen. einen select um zu prüfen ob der user bereits belegt ist will ich vermeiden.

hat jemand ne clevere idee?

  1. hi,

    In dem Unique key kann ich keine "lower" oder "lcase" funktion verwenden.

    Brauchst du auch nicht.
    Die TEXT-Typen von MySQL berücksichtigen per Default beim Suchen, Indizieren etc. keine Groß-/Kleinschreibung.

    Lege also für deine VARCHAR-Spalte einen UNIQUE-Index an, und fertig.

    Wenn ein Datensatz mit dem Wert 'blah' existiert, wirst du beim Versuch z.B. 'Blah', 'BLAH' oder 'bLAh' einzufügen, eine "duplicate key"-Meldung bekommen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Wow, du hast Recht.
      Sollte man sich im hinterkopf halten.