Frage

Ich habe eine Tabelle (eine vorhandene Tabelle mit Daten in it) und die Tabelle hat eine Spalte Usernamen. Ich möchte diese Username eindeutig sein. So füge ich eine Einschränkung wie folgt aus:

ALTER TABLE Users 
ADD CONSTRAINT [IX_UniqueUserUserName] UNIQUE NONCLUSTERED ([UserName])

Jetzt erhalte ich die Fehlermeldung, die Benutzer duplizieren in dieser Tabelle existieren. Aber ich habe die Datenbank mit der folgenden Abfrage geprüft:

SELECT COUNT(UserId) as NumberOfUsers, UserName 
FROM Users 
GROUP BY UserName, UserId 
ORDER BY UserName

Dies führt zu einer Liste der Benutzer alle 1 als NumberOfUsers hat. So gibt es keine Duplikate. Aber wenn ich die Benutzername bin Überprüfung er nicht ich sehe folgendes Ergebnis:

beluga
béluga

So apperently er nicht ein „e“ und „E“ oder „e“ vergleichen ... Es ist wie er diese ignoriert, ist es eine Möglichkeit, dass SQL nicht, diese Akzente nicht ignorieren, wenn die eindeutigen Schlüssel contraint hinzufügen.

LÖSUNG:

THX an euch ich die Lösung gefunden habe. Dies das Problem behoben:

ALTER TABLE Users 
ALTER COLUMN UserName nvarchar(250) COLLATE SQL_Latin1_General_CP1_CI_AS
War es hilfreich?

Lösung

Die Sortierung Sie wahrscheinlich verwenden ignoriert Fall und Akzente beim Vergleich. Sie werden die Sortierung ändern.

  • Latin1_General_CI_AI Ignoriert Fall und Akzente
  • Latin1_General_CI_AS nicht ignorieren Akzente

Liste der SQL Server-Sortierungsnamen hier .

Andere Tipps

Ihre Anfrage Gruppen von Benutzer-ID zu -. Sie wollen nicht, dass zu tun,

Verwendung:

SELECT COUNT(*) as NumberOfUsers, UserName 
    FROM Users 
    GROUP BY UserName 
    ORDER BY UserName

Ihre Abfrage würde zeigen, nur von Benutzern mit dem gleichen Namen und die gleichen Benutzer-ID. Oder vielleicht, um die Daten von COUNT(*) zu bestellen, so dass die letzte Zeile, die am meisten auftaucht ist wahrscheinlich der Querulant?

Sie können auch Probleme mit Sortierungs haben wie andere vorgeschlagen haben, aber normalerweise würde GROUP BY selbst konsistent.

Vermutlich UserId ist Ihr Primärschlüssel. Da es ein Teil ist, was Sie Gruppierung durch, werden Sie garantiert eine einzelne Zeile pro Gruppe zu erhalten. Nehmen Sie die „userId“ Spalte aus Ihrer Gruppe durch.

Wie Andrew Barrett sagt, die Standardsortierung in MySQL doesn nicht Akzente erkennen korrekt.

Ändern Sie die Sortierung Ihrer Felder auf UTF8_unicode_ci und es sollte Akzente richtig sehen.

ci bedeutet Groß- und Kleinschreibung, und Sie können eine andere Sortierung verwenden, wenn Fall wichtig ist.

Sie können eine neue Tabelle mit der neuen Zusammenstellung erstellen, kopieren Sie * aus der vorhandenen Tabelle in die neuen.

Beachten Sie auch, dass Sie auch nur die Tabelle erstellen, können Sie in der relevent Sortierungs interessiert sind (anstelle von Server breit) .So Sie auch so etwas wie tun könnte:

CREATE TABLE Users (c1 varchar (10), .., COLLATE Latin1_General_CI_AS NULL )
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top