sql >> Databáze >  >> RDS >> Sqlserver

Jedinečný sloupec SQL Server 2008, který rozlišuje malá a velká písmena

Jedinečnost může být vynucena jedinečným omezením.

Zda jedinečný index rozlišuje malá a velká písmena, je definováno kolováním serveru (nebo tabulky) .

Aktuální řazení vaší databáze můžete získat pomocí tohoto dotazu:

SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;

a měli byste dostat něco jako:

SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS

Zde „CI_AS“ na konci porovnávání znamená:CI =Bez ohledu na malá a velká písmena, AS =Citlivost na akcenty.

To lze změnit na cokoliv, co potřebujete. Pokud má vaše databáze a/nebo tabulka řazení rozlišující malá a velká písmena, očekával bych, že jedinečnost vašeho indexu bude také rozlišovat malá a velká písmena, např. váš abcdef a ABCDEF by měly být oba přijatelné jako jedinečné řetězce.

Marc

AKTUALIZACE:

Právě jsem to zkusil (SQL Server 2008 Developer Edition x64) - funguje pro mě (moje databáze obecně používá "Latin1_General_CI_AS Collation, ale mohu definovat jinou pro každou tabulku / pro každý sloupec VARCHAR dokonce):

CREATE TABLE TestUnique
    (string VARCHAR(50) COLLATE SQL_Latin1_General_Cp1_CS_AS)

CREATE UNIQUE INDEX UIX_Test ON dbo.TestUnique(string)

INSERT INTO dbo.TestUnique(string) VALUES ('abc')
INSERT INTO dbo.TestUnique(string) VALUES ('ABC')

SELECT * FROM dbo.TestUnique

a vrátím se:

string
ABC
abc

a žádná chyba o porušení jedinečného indexu.



  1. Nebyl nalezen konvertor pro návratovou hodnotu typu:class java.util.ArrayList (Spring Boot)

  2. Oracle ODBC:SQLAllocHandle ovladače na SQL_HANDLE_ENV se nezdařilo

  3. PostgreSQL podřetězec získat řetězec mezi hranaté závorky

  4. Operátor mínus mi dává chyby v mysql