Dela via


Stöd för sortering och Unicode

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft Fabric

Kollektioner i SQL Server innehåller sorteringsregler, skiftläges- och accentkänslighet av dina data. Sorteringar som används med teckendatatyper, såsom char och varchar, bestämmer kodsidan och motsvarande tecken som kan representeras för den datatypen.

Oavsett om du installerar en ny instans av SQL Server, återställer en databassäkerhetskopia eller ansluter servern till klientdatabaser är det viktigt att du förstår språkkraven, sorteringsordningen och skiftläges- och accentkänsligheten för de data som du arbetar med. Om du vill visa en lista över sorteringar som är tillgängliga på din instans av SQL Server, se sys.fn_helpcollations.

När du väljer en sortering för servern, databasen, kolumnen eller uttrycket tilldelar du vissa egenskaper till dina data. Dessa egenskaper påverkar resultatet av många åtgärder i databasen. När du till exempel skapar en fråga med hjälp av ORDER BYkan sorteringsordningen för resultatuppsättningen bero på den sortering som tillämpas på databasen eller dikteras i en COLLATE-sats på frågans uttrycksnivå.

Om du vill använda sorteringsstöd på bästa sätt i SQL Server bör du förstå de termer som definieras i den här artikeln och hur de relaterar till egenskaperna hos dina data.

Sorteringsvillkor

Sammanställning

En sortering anger de bitmönster som representerar varje tecken i en datamängd. Kollationeringar avgör också de regler som sorterar och jämför data. SQL Server stöder lagring av objekt som har olika sortering i en enda databas. För icke-Unicode-kolumner anger sorteringsinställningen kodsidan för data och vilka tecken som kan representeras. Data som du flyttar mellan icke-Unicode-kolumner måste konverteras från källkodssidan till målkodsidan.

Transact-SQL-instruktionsresultat kan variera när -instruktionen körs i kontexten för olika databaser som har olika sorteringsinställningar. Använd om möjligt en standardiserad sortering för din organisation. På så sätt behöver du inte ange sorteringen i varje tecken eller Unicode-uttryck. Om du måste arbeta med objekt som har olika sorterings- och kodsideinställningar kodar du dina frågor för att överväga reglerna för sorteringsprioritet. Mer information finns i sorteringsprioritet.

Alternativen som är associerade med en sortering är skiftlägeskänslighet, accentkänslighet, kana-känslighet, breddkänslighet och känslighet för variantväljare. SQL Server 2019 (15.x) introducerar ytterligare ett alternativ för UTF-8 kodning.

Du kan ange de här alternativen genom att lägga till dem i sorteringsnamnet. Sorteringen Japanese_Bushu_Kakusu_100_CS_AS_KS_WS_SC_UTF8 till exempel är skiftlägeskänslig, accentkänslig, kana-känslig, breddkänslig och UTF-8-kodad. Som ett annat exempel är sorteringen Japanese_Bushu_Kakusu_140_CI_AI_KS_WS_VSS skiftlägesokänslig, accentokänslig, kana-känslig, breddkänslig, variantväljare-känslig och använder en äldre kodsida för varchar.

Beteendet som är associerat med dessa olika alternativ beskrivs i följande tabell:

Alternativ Beskrivning
Skiftlägeskänsligt (_CS) Skiljer mellan versaler och gemener. Om du väljer det här alternativet, sorteras gemener före deras versaler. Om det här alternativet inte är markerat är sorteringen icke skiftlägeskänslig. SQL Server anser att stora och små bokstäver är identiska i syfte att sortera. Du kan uttryckligen välja icke skiftlägeskänslighet genom att ange _CI.
Accentkänsligt (_AS) Skiljer mellan betydda och obetydda tecken. a är till exempel inte lika med . Om det här alternativet inte är markerat är sorteringen okänslig för accenter. Det vill säga, SQL Server anser att de accenterade och oaccenterade versionerna av bokstäver är identiska för sorteringsändamål. Du kan uttryckligen välja accentokänslighet genom att ange _AI.
Kana-känslig (_KS) Skiljer mellan de två typerna av japanska kana-tecken: Hiragana och Katakana. Om det här alternativet inte är markerat är sorteringen kana-okänslig. Det vill säga att SQL Server anser att Hiragana- och Katakana-tecken är lika för sortering. Att utelämna det här alternativet är den enda metoden för att ange insensitivitet för kana.
Breddkänslig (_WS) Skiljer mellan tecken med full bredd och halv bredd. Om det här alternativet inte är markerat anser SQL Server att representationen med full bredd och halv bredd av samma tecken är identisk i sorteringssyfte. Att utelämna det här alternativet är den enda metoden för att ange width-insensitivity.
Variantväljarkänslig (_VSS) Skiljer mellan olika ideografiska variantväljare i de japanska sorteringarna Japanese_Bushu_Kakusu_140 och Japanese_XJIS_140, som introduceras i SQL Server 2017 (14.x). En variantsekvens består av ett bastecken plus en variantväljare. Om det här _VSS alternativet inte är markerat är sorteringen variant-selector-insensitiv och variantväljaren beaktas inte i jämförelsen. Sql Server anser alltså att tecken som bygger på samma grundtecken med olika variantväljare är identiska i sorteringssyfte. Mer information finns i Unicode Ideographic Variant Database.

Sorteringsordningar med variantselektor (_VSS) stöds inte i fulltextsökningsindex. Fulltextindex stöder endast Accent-Sensitive (_AS), Kana-känsliga (_KS) och breddkänsliga (_WS) alternativ. SQL Server XML och CLR () integration (Common Language Runtime) motorer stöder inte (_VSS) variantväljare.
Binärt (_BIN) 1 Sorterar och jämför data i SQL Server-tabeller baserat på bitmönster som definierats för varje tecken. Binär sorteringsordning är skiftlägeskänslig och accentkänslig. Binärt är också den snabbaste sorteringsordningen. Mer information finns i avsnittet Binära sorteringar i den här artikeln.
Binärkodspunkt (_BIN2) 1 Sorterar och jämför data i SQL Server-tabeller baserat på Unicode-kodpunkter för Unicode-data. För icke-Unicode-data använder binärkodspunkten jämförelser som är identiska med dem för binära sorteringar.

Fördelen med att använda en sorteringsordning för binärkodspunkter är att ingen omsortering av data krävs i program som jämför data som sorterats i SQL Server. Därför ger en sorteringsordning för binärkodspunkter enklare programutveckling och möjliga prestandaökningar. Mer information finns i avsnittet Binära sorteringar i den här artikeln.
UTF-8 (_UTF8) Gör att UTF-8-kodade data kan lagras i SQL Server. Om det här alternativet inte är markerat använder SQL Server standardformatet för icke-Unicode-kodning för tillämpliga datatyper. Mer information finns i avsnittet UTF-8 Support i den här artikeln.

1 Om binär- eller binärkodspunkt har valts är alternativen Skiftlägeskänsliga (_CS), dekorkänsliga (_AS), Kana-känsliga (_KS) och Breddkänsliga (_WS) inte tillgängliga.

Exempel på sorteringsalternativ

Varje sortering kombineras som en serie suffix för att definiera skiftläges-, accent-, bredd- eller kana-känslighet. I följande exempel beskrivs sorteringsordningens beteende för olika kombinationer av suffix.

Windows-sorteringssuffix Beskrivning av sorteringsordning
_BIN 1 Binär sortering
_BIN2 1, 2 Sorteringsordning för binär kodpunkt
_CI_AI 2 Skiftlägesokänslig, accentokänslig, kanaokänslig, breddokänslig
_CI_AI_KS 2 Skiftlägesokänslig, accentokänslig, kana-känslig, breddokänslig
_CI_AI_KS_WS 2 Skiftlägesokänslig, accentokänslig, kana-känslig, breddkänslig
_CI_AI_WS 2 Okänslig för skiftläge, okänslig för accenter, kana-okänslig, breddkänslig
_CI_AS 2 Skiftlägesokänslig, accentkänslig, kana-okänslig, breddokänslig
_CI_AS_KS 2 Skiftlägesokänslig, accentkänslig, kana-känslig, breddokänslig
_CI_AS_KS_WS 2 Okänslig för skiftläge, accentkänslig, kana-känslig, breddkänslig
_CI_AS_WS 2 Skiftlägesokänslig, accentkänslig, kana-okänslig, breddkänslig
_CS_AI 2 Skiftläges-känslig, accent-okänslig, kana-okänslig, bredd-okänslig
_CS_AI_KS 2 Skiftlägeskänslig, accentokänslig, kana-känslig, breddokänslig
_CS_AI_KS_WS 2 Skiftlägeskänslig, accent-känslig, kana-känslig, breddkänslig
_CS_AI_WS 2 Skiftlägeskänslig, accent-okänslig, kana-okänslig, breddkänslig
_CS_AS 2 Skiftlägeskänslig, accentkänslig, kana-okänslig, breddokänslig
_CS_AS_KS 2 Skiftlägeskänslig, accentkänslig, kanakänslig, breddokänslig
_CS_AS_KS_WS 2 Skiftlägeskänslig, accentkänslig, kanakänslig, breddkänslig
_CS_AS_WS 2 Skiftlägeskänslig, accentkänslig, kanaokänslig, breddkänslig

1 Om binär- eller binärkodspunkt har valts är alternativen Skiftlägeskänsliga (_CS), dekorkänsliga (_AS), Kana-känsliga (_KS) och Breddkänsliga (_WS) inte tillgängliga.

2 Om du lägger till UTF-8-alternativet (_UTF8) kan du koda Unicode-data med hjälp av UTF-8. Mer information finns i avsnittet UTF-8 Support i den här artikeln.

Sorteringsuppsättningar

SQL Server stöder följande sorteringsuppsättningar:

Windows-kollationer

Windows-sorteringsordningar definierar regler för lagring av teckendata som baseras på systemets associerade nationella inställningar i Windows. För en Windows-sortering kan du implementera en jämförelse av icke-Unicode-data med hjälp av samma algoritm som för Unicode-data. De grundläggande Windows-sorteringsreglerna anger vilket alfabet eller språk som används när ordlistesortering tillämpas. Reglerna anger också den kodsida som används för att lagra teckendata som inte är Unicode-tecken. Både Unicode- och icke-Unicode-sortering är kompatibla med strängjämförelser i en viss version av Windows. Detta ger konsekvens mellan datatyper i SQL Server och gör att utvecklare kan sortera strängar i sina program med hjälp av samma regler som används av SQL Server. För mer information, se Windows-sammanställningsnamn.

Binär sortering

Binär sortering sorterar data baserat på sekvensen med kodade värden som definieras av nationella inställningar och datatyp. De är skiftlägeskänsliga. En binär sortering i SQL Server definierar språkvarianten och ansi-kodsidan som används. Detta framtvingar en binär sorteringsordning. Eftersom de är relativt enkla kan binära sorteringar förbättra programmets prestanda. För datatyper som inte är Unicode baseras datajämförelser på de kodpunkter som definieras på ANSI-kodsidan. För Unicode-datatyper baseras datajämförelser på Unicode-kodpunkterna. För binära sorteringar på Unicode-datatyper beaktas inte nationella inställningar i datasortering. Till exempel ger Latin1_General_BIN och Japanese_BIN identiska sorteringsresultat när de används på Unicode-data. För mer information, se Windows-sammanställningsnamn.

Det finns två typer av binära sorteringsordningar i SQL Server.

  • De äldre BIN sorteringar, som utförde en ofullständig jämförelse av kodpunkt-till-kodpunkt för Unicode-data. Äldre binära sorteringar jämförde det första tecknet som WCHAR, följt av en jämförelse mellan byte och byte. I en BIN-sortering sorteras endast det första tecknet enligt kodpunkten och återstående tecken sorteras enligt bytevärdena.

  • De nyare BIN2 sorteringarna, som implementerar en ren jämförelse av kodpunkter. I en BIN2-sortering sorteras alla tecken enligt deras kodpunkter. Eftersom Intel-plattformen är lite endiansk arkitektur lagras unicode-kodtecken alltid byte-växlade.

SQL Server-sortering

SQL Server-sortering (SQL_*) ger sorteringsordningskompatibilitet med tidigare versioner av SQL Server. Sorteringsreglerna för icke-Unicode-data är inte kompatibla med sorteringsrutiner som tillhandahålls av Windows-operativsystem. Att sortera Unicode-data är dock kompatibelt med en viss version av Windows-sorteringsregler. Eftersom SQL Server-sortering använder olika jämförelseregler för icke-Unicode- och Unicode-data ser du olika resultat för jämförelser av samma data, beroende på den underliggande datatypen.

Om du till exempel använder SQL-sortering SQL_Latin1_General_CP1_CI_ASär strängen som inte är Unicode 'a-c' mindre än strängen 'ab' eftersom bindestrecket (-) sorteras som ett separat tecken som kommer före b. Men om du konverterar dessa strängar till Unicode och utför samma jämförelse anses Unicode-strängen N'a-c' vara större än N'ab'eftersom Unicode-sorteringsreglerna använder en ordsortering som ignorerar bindestrecket.

Mer information finns i SQL Server-sorteringsnamn.

Under konfigurationen av SQL Server bestäms standardinställningen för installationssortering av operativsystemets nationella inställningar. Du kan ändra sortering på servernivå antingen under installationen eller genom att ändra operativsystemets nationella inställningar före installationen. Av bakåtkompatibilitetsskäl är standardsortering inställd på den äldsta tillgängliga versionen som är associerad med varje specifik språkvariant. Därför är detta inte alltid den rekommenderade sorteringen. Om du vill dra full nytta av SQL Server-funktioner ändrar du standardinstallationsinställningarna för att använda Windows-sortering. För exempelvis den lokala inställningen "Engelska (USA)" (kodsida 1252) är standardsorteringen SQL_Latin1_General_CP1_CI_ASvid installationen, och den kan ändras till närmaste motsvarighet för Windows-sortering, Latin1_General_100_CI_AS_SC.

När du uppgraderar en engelskspråkig instans av SQL Server kan du ange SQL Server-sortering (SQL_*) för kompatibilitet med befintliga instanser av SQL Server. Eftersom standardsortering för en instans av SQL Server definieras under installationen kontrollerar du att du anger sorteringsinställningarna noggrant när följande villkor är uppfyllda:

  • Din programkod beror på beteendet för tidigare SQL Server-sortering.
  • Du måste lagra teckendata som återspeglar flera språk.

Sorteringsnivåer

Inställningssortering stöds på följande nivåer i en instans av SQL Server:

Sortering på servernivå

Standardserversortering bestäms under SQL Server-konfigurationen och blir standardsortering av systemdatabaserna och alla användardatabaser.

I följande tabell visas standardsorteringsbeteckningarna enligt operativsystemets nationella inställningar, inklusive deras Windows- och SQL Language Code-identifierare (LCID):

Nationella inställningar för Windows Windows LCID (lokaliserings-ID) SQL LCID Standardsorteringsordning
Afrikaans (Sydafrika) 0x0436 0x0409 Latin1_General_CI_AS
Albanska (Albanien) 0x041c 0x041c Albanian_CI_AS
Alsatian (Frankrike) 0x0484 0x0409 Latin1_General_CI_AS
Amhariska (Etiopien) 0x045e 0x0409 Latin1_General_CI_AS
Arabiska (Algeriet) 0x1401 0x0401 Arabic_CI_AS
Arabiska (Bahrain) 0x3c01 0x0401 Arabic_CI_AS
Arabiska (Egypten) 0x0c01 0x0401 Arabic_CI_AS
Arabiska (Irak) 0x0801 0x0401 Arabic_CI_AS
Arabiska (Jordanien) 0x2c01 0x0401 Arabic_CI_AS
Arabiska (Kuwait) 0x3401 0x0401 Arabic_CI_AS
Arabiska (Libanon) 0x3001 0x0401 Arabic_CI_AS
Arabiska (Libyen) 0x1001 0x0401 Arabic_CI_AS
Arabiska (Marocko) 0x1801 0x0401 Arabic_CI_AS
Arabiska (Oman) 0x2001 0x0401 Arabic_CI_AS
Arabiska (Qatar) 0x4001 0x0401 Arabic_CI_AS
Arabiska (Saudiarabien) 0x0401 0x0401 Arabic_CI_AS
Arabiska (Syrien) 0x2801 0x0401 Arabic_CI_AS
Arabiska (Tunisien) 0x1c01 0x0401 Arabic_CI_AS
Arabiska (U.A.E.) 0x3801 0x0401 Arabic_CI_AS
Arabiska (Jemen) 0x2401 0x0401 Arabic_CI_AS
Armeniska (Armenien) 0x042b 0x0419 Latin1_General_CI_AS
Assamese (Indien) 0x044d 0x044d Inte tillgängligt på servernivå
Azerbajdzjan (Azerbajdzjan, kyrillisk) 0x082c 0x082c Inaktuell, inte tillgänglig på servernivå
Azerbajdzjan (Azerbajdzjan, latinsk) 0x042c 0x042c Inaktuell, inte tillgänglig på servernivå
Bashkir (Ryssland) 0x046d 0x046d Latin1_General_CI_AI
Baskiska 0x042d 0x0409 Latin1_General_CI_AS
Vitryska (Vitryssland) 0x0423 0x0419 Cyrillic_General_CI_AS
Bangla (Bangladesh) 0x0845 0x0445 Inte tillgängligt på servernivå
Bengali (Indien) 0x0445 0x0439 Inte tillgängligt på servernivå
Bosniska (Bosnien och Hercegovina, kyrillisk) 0x201a 0x201a Latin1_General_CI_AI
Bosniska (Bosnien och Hercegovina, latin) 0x141a 0x141a Latin1_General_CI_AI
Breton (Frankrike) 0x047e 0x047e Latin1_General_CI_AI
Bulgariska (Bulgarien) 0x0402 0x0419 Cyrillic_General_CI_AS
Katalanska (katalanska) 0x0403 0x0409 Latin1_General_CI_AS
Kinesiska (Hongkong SAR, Folkrepubliken Kina) 0x0c04 0x0404 Kinesiska_Taiwan_Stroke_CI_AS
Kinesiska (Macao Särskild Administrativ Region) 0x1404 0x1404 Latin1_General_CI_AI
Kinesiska (Macao Särskild Administrativ Region) 0x21404 0x21404 Latin1_General_CI_AI
Kinesiska (Folkrepubliken Kina) 0x0804 0x0804 Chinese_PRC_CI_AS
Kinesiska (Folkrepubliken Kina) 0x20804 0x20804 Chinese_PRC_Stroke_CI_AS
Kinesiska (Singapore) 0x1004 0x0804 Chinese_PRC_CI_AS
Kinesiska (Singapore) 0x21004 0x20804 Chinese_PRC_Stroke_CI_AS
Kinesiska (Taiwan) 0x30404 0x30404 Chinese_Taiwan_Bopomofo_CI_AS
Kinesiska (Taiwan) 0x0404 0x0404 Kinesiska_Taiwan_Stroke_CI_AS
Korsikan (Frankrike) 0x0483 0x0483 Latin1_General_CI_AI
Kroatiska (Bosnien och Hercegovina, latin) 0x101a 0x041a Croatian_CI_AS
Kroatiska (Kroatien) 0x041a 0x041a Croatian_CI_AS
Tjeckiska (Tjeckien) 0x0405 0x0405 Czech_CI_AS
Danska (Danmark) 0x0406 0x0406 Danish_Norwegian_CI_AS
Dari (Afghanistan) 0x048c 0x048c Latin1_General_CI_AI
Divehi (Maldiverna) 0x0465 0x0465 Inte tillgängligt på servernivå
Nederländska (Belgien) 0x0813 0x0409 Latin1_General_CI_AS
Nederländska (Nederländerna) 0x0413 0x0409 Latin1_General_CI_AS
Engelska (Australien) 0x0c09 0x0409 Latin1_General_CI_AS
Engelska (Belize) 0x2809 0x0409 Latin1_General_CI_AS
Engelska (Kanada) 0x1009 0x0409 Latin1_General_CI_AS
Engelska (Karibien) 0x2409 0x0409 Latin1_General_CI_AS
Engelska (Indien) 0x4009 0x0409 Latin1_General_CI_AS
Engelska (Irland) 0x1809 0x0409 Latin1_General_CI_AS
Engelska (Jamaica) 0x2009 0x0409 Latin1_General_CI_AS
Engelska (Malaysia) 0x4409 0x0409 Latin1_General_CI_AS
Engelska (Nya Zeeland) 0x1409 0x0409 Latin1_General_CI_AS
Engelska (Filippinerna) 0x3409 0x0409 Latin1_General_CI_AS
Engelska (Singapore) 0x4809 0x0409 Latin1_General_CI_AS
Engelska (Sydafrika) 0x1c09 0x0409 Latin1_General_CI_AS
Engelska (Trinidad och Tobago) 0x2c09 0x0409 Latin1_General_CI_AS
Engelska (Storbritannien) 0x0809 0x0409 Latin1_General_CI_AS
Engelska (USA) 0x0409 0x0409 SQL_Latin1_General_CP1_CI_AS
Engelska (Zimbabwe) 0x3009 0x0409 Latin1_General_CI_AS
Estniska (Estland) 0x0425 0x0425 Estonian_CI_AS
Färöiska (Färöarna) 0x0438 0x0409 Latin1_General_CI_AS
Filipino (Filippinerna) 0x0464 0x0409 Latin1_General_CI_AS
Finska (Finland) 0x040b 0x040b Finnish_Swedish_CI_AS
Franska (Belgien) 0x080c 0x040c French_CI_AS
Franska (Kanada) 0x0c0c 0x040c French_CI_AS
Franska (Frankrike) 0x040c 0x040c French_CI_AS
Franska (Luxemburg) 0x140c 0x040c French_CI_AS
Franska (Monaco) 0x180c 0x040c French_CI_AS
Franska (Schweiz) 0x100c 0x040c French_CI_AS
Frisian (Nederländerna) 0x0462 0x0462 Latin1_General_CI_AI
Galiciska 0x0456 0x0409 Latin1_General_CI_AS
Georgiska (Georgien) 0x10437 0x10437 Georgian_Modern_Sort_CI_AS
Georgiska (Georgien) 0x0437 0x0419 Latin1_General_CI_AS
Tyska – Sortering enligt telefonkatalog (DIN) 0x10407 0x10407 German_PhoneBook_CI_AS
Tyska (Österrike) 0x0c07 0x0409 Latin1_General_CI_AS
Tyska (Tyskland) 0x0407 0x0409 Latin1_General_CI_AS
Tyska (Liechtenstein) 0x1407 0x0409 Latin1_General_CI_AS
Tyska (Luxemburg) 0x1007 0x0409 Latin1_General_CI_AS
Tyska (Schweiz) 0x0807 0x0409 Latin1_General_CI_AS
Grekiska (Grekland) 0x0408 0x0408 Greek_CI_AS
Grönländska (Grönland) 0x046f 0x0406 Danish_Norwegian_CI_AS
Gujarati (Indien) 0x0447 0x0439 Inte tillgängligt på servernivå
Hausa (Nigeria, Latin) 0x0468 0x0409 Latin1_General_CI_AS
Hebreiska (Israel) 0x040d 0x040d Hebrew_CI_AS
Hindi (Indien) 0x0439 0x0439 Inte tillgängligt på servernivå
Ungerska (Ungern) 0x040e 0x040e Hungarian_CI_AS
Ungersk teknisk sortering 0x1040e 0x1040e Hungarian_Technical_CI_AS
Isländska (Island) 0x040f 0x040f Icelandic_CI_AS
Igbo (Nigeria) 0x0470 0x0409 Latin1_General_CI_AS
Indonesiska (Indonesien) 0x0421 0x0409 Latin1_General_CI_AS
Inuktitut (Kanada, Latin) 0x085d 0x0409 Latin1_General_CI_AS
Inuktitut (Syllabics) Kanada 0x045d 0x045d Latin1_General_CI_AI
Irländska (Irland) 0x083c 0x0409 Latin1_General_CI_AS
Italienska (Italien) 0x0410 0x0409 Latin1_General_CI_AS
Italienska (Schweiz) 0x0810 0x0409 Latin1_General_CI_AS
Japanska (Japan XJIS) 0x0411 0x0411 Japanese_CI_AS
Japanska (Japan) 0x040411 0x40411 Latin1_General_CI_AI
Kannada (Indien) 0x044b 0x0439 Inte tillgängligt på servernivå
Kazakiska (Kazakstan) 0x043f 0x043f Kazakh_90_CI_AS
Khmer (Kambodja) 0x0453 0x0453 Inte tillgängligt på servernivå
K'iche (Guatemala) 0x0486 0x0c0a Modern_Spanish_CI_AS
Kinyarwanda (Rwanda) 0x0487 0x0409 Latin1_General_CI_AS
Konkani (Indien) 0x0457 0x0439 Inte tillgängligt på servernivå
Koreanska (Ordlistesortering i Korea) 0x0412 0x0412 Korean_Wansung_CI_AS
Kirgiziska (Kirgizistan) 0x0440 0x0419 Cyrillic_General_CI_AS
Lao (Lao PDR) 0x0454 0x0454 Inte tillgängligt på servernivå
Lettiska (Lettland/Latvia) 0x0426 0x0426 Latvian_CI_AS
Litauiska (Litauen) 0x0427 0x0427 Lithuanian_CI_AS
Lägre sorbian (Tyskland) 0x082e 0x0409 Latin1_General_CI_AS
Luxemburgska (Luxemburg) 0x046e 0x0409 Latin1_General_CI_AS
Makedonska språket (Nordmakedonien) 0x042f 0x042f Macedonian_FYROM_90_CI_AS
Malay (Brunei Darussalam) 0x083e 0x0409 Latin1_General_CI_AS
Malaysiska (Malaysia) 0x043e 0x0409 Latin1_General_CI_AS
Malayalam (Indien) 0x044c 0x0439 Inte tillgängligt på servernivå
Maltesiska (Malta) 0x043a 0x043a Latin1_General_CI_AI
Maori (Nya Zeeland) 0x0481 0x0481 Latin1_General_CI_AI
Mapudungun (Chile) 0x047a 0x047a Latin1_General_CI_AI
Marathi (Indien) 0x044e 0x0439 Inte tillgängligt på servernivå
Mohawk (Kanada) 0x047c 0x047c Latin1_General_CI_AI
Mongoliska (Mongoliet) 0x0450 0x0419 Cyrillic_General_CI_AS
Mongoliska (Folkrepubliken Kina) 0x0850 0x0419 Cyrillic_General_CI_AS
Nepali (Nepal) 0x0461 0x0461 Inte tillgängligt på servernivå
Norska (Bokmål, Norge) 0x0414 0x0414 Latin1_General_CI_AI
Norska (Nynorsk, Norge) 0x0814 0x0414 Latin1_General_CI_AI
Occitan (Frankrike) 0x0482 0x040c French_CI_AS
Odia (Indien) 0x0448 0x0439 Inte tillgängligt på servernivå
Pashto (Afghanistan) 0x0463 0x0463 Inte tillgängligt på servernivå
Persiska (Iran) 0x0429 0x0429 Latin1_General_CI_AI
Polska (Polen) 0x0415 0x0415 Polish_CI_AS
Portugisiska (Brasilien) 0x0416 0x0409 Latin1_General_CI_AS
Portugisiska (Portugal) 0x0816 0x0409 Latin1_General_CI_AS
Punjabi (Indien) 0x0446 0x0439 Inte tillgängligt på servernivå
Quechua (Bolivia) 0x046b 0x0409 Latin1_General_CI_AS
Quechua (Ecuador) 0x086b 0x0409 Latin1_General_CI_AS
Quechua (Peru) 0x0c6b 0x0409 Latin1_General_CI_AS
Rumänska (Rumänien) 0x0418 0x0418 Romanian_CI_AS
Romansh (Schweiz) 0x0417 0x0417 Latin1_General_CI_AI
Ryska (Ryssland) 0x0419 0x0419 Cyrillic_General_CI_AS
Sakha (Ryssland) 0x0485 0x0485 Latin1_General_CI_AI
Samiska (Inari, Finland) 0x243b 0x083b Latin1_General_CI_AI
Samiska (Lule, Norge) 0x103b 0x043b Latin1_General_CI_AI
Samiska (Lule, Sverige) 0x143b 0x083b Latin1_General_CI_AI
Samiska (norra, Finland) 0x0c3b 0x083b Latin1_General_CI_AI
Samiska (norra, Norge) 0x043b 0x043b Latin1_General_CI_AI
Samiska (norra, Sverige) 0x083b 0x083b Latin1_General_CI_AI
Samiska (Skolt, Finland) 0x203b 0x083b Latin1_General_CI_AI
Samiska (södra, Norge) 0x183b 0x043b Latin1_General_CI_AI
Samiska (Södra, Sverige) 0x1c3b 0x083b Latin1_General_CI_AI
Sanskrit (Indien) 0x044f 0x0439 Inte tillgängligt på servernivå
Serbiska (Bosnien och Hercegovina, kyrillisk) 0x1c1a 0x0c1a Latin1_General_CI_AI
Serbiska (Bosnien och Hercegovina, latin) 0x181a 0x081a Latin1_General_CI_AI
Serbiska (Serbien, kyrillisk) 0x0c1a 0x0c1a Latin1_General_CI_AI
Serbiska (Serbien, latin) 0x081a 0x081a Latin1_General_CI_AI
Sesotho sa Leboa/Northern Sotho (Sydafrika) 0x046c 0x0409 Latin1_General_CI_AS
Setswana/Tswana (Sydafrika) 0x0432 0x0409 Latin1_General_CI_AS
Sinhala (Sri Lanka) 0x045b 0x0439 Inte tillgängligt på servernivå
Slovakiska (Slovakien) 0x041b 0x041b Slovak_CI_AS
Slovenska (Slovenien) 0x0424 0x0424 Slovenian_CI_AS
Spanska (Argentina) 0x2c0a 0x0c0a Modern_Spanish_CI_AS
Spanska (Bolivia) 0x400a 0x0c0a Modern_Spanish_CI_AS
Spanska (Chile) 0x340a 0x0c0a Modern_Spanish_CI_AS
Spanska (Colombia) 0x240a 0x0c0a Modern_Spanish_CI_AS
Spanska (Costa Rica) 0x140a 0x0c0a Modern_Spanish_CI_AS
Spanska (Dominikanska republiken) 0x1c0a 0x0c0a Modern_Spanish_CI_AS
Spanska (Ecuador) 0x300a 0x0c0a Modern_Spanish_CI_AS
Spanska (El Salvador) 0x440a 0x0c0a Modern_Spanish_CI_AS
Spanska (Guatemala) 0x100a 0x0c0a Modern_Spanish_CI_AS
Spanska (Honduras) 0x480a 0x0c0a Modern_Spanish_CI_AS
Spanska (Mexiko) 0x080a 0x0c0a Modern_Spanish_CI_AS
Spanska (Nicaragua) 0x4c0a 0x0c0a Modern_Spanish_CI_AS
Spanska (Panama) 0x180a 0x0c0a Modern_Spanish_CI_AS
Spanska (Paraguay) 0x3c0a 0x0c0a Modern_Spanish_CI_AS
Spanska (Peru) 0x280a 0x0c0a Modern_Spanish_CI_AS
Spanska (Puerto Rico) 0x500a 0x0c0a Modern_Spanish_CI_AS
Spanska (Spanien) 0x0c0a 0x0c0a Modern_Spanish_CI_AS
Spanska (Spanien, traditionell sortering) 0x040a 0x040a Traditional_Spanish_CI_AS
Spanska (USA) 0x540a 0x0409 Latin1_General_CI_AS
Spanska (Uruguay) 0x380a 0x0c0a Modern_Spanish_CI_AS
Spanska (Venezuela) 0x200a 0x0c0a Modern_Spanish_CI_AS
Swahili (Kenya) 0x0441 0x0409 Latin1_General_CI_AS
Svenska (Finland) 0x081d 0x040b Finnish_Swedish_CI_AS
Svenska (Sverige) 0x041d 0x040b Finnish_Swedish_CI_AS
Syrien (Syrien) 0x045a 0x045a Inte tillgängligt på servernivå
Tadzjikistan 0x0428 0x0419 Cyrillic_General_CI_AS
Tamazight (Algeriet, Latin) 0x085f 0x085f Latin1_General_CI_AI
Tamil (Indien) 0x0449 0x0439 Inte tillgängligt på servernivå
Tatar (Ryssland) 0x0444 0x0444 Cyrillic_General_CI_AS
Telugu (Indien) 0x044a 0x0439 Inte tillgängligt på servernivå
Thai (Thailand) 0x041e 0x041e Thai_CI_AS
Tibetansk (Kina, folkrepubliken) 0x0451 0x0451 Inte tillgängligt på servernivå
Turkiska (Turkiet) 0x041f 0x041f Turkish_CI_AS
Turkmen (Turkmenistan) 0x0442 0x0442 Latin1_General_CI_AI
Uiguriska (Folkrepubliken Kina) 0x0480 0x0480 Latin1_General_CI_AI
Ukrainska (Ukraina) 0x0422 0x0422 Ukrainian_CI_AS
Övre sorbiska (Tyskland) 0x042e 0x042e Latin1_General_CI_AI
Urdu (Pakistan) 0x0420 0x0420 Latin1_General_CI_AI
Uzbekiska (Uzbekistan, kyrillisk) 0x0843 0x0419 Cyrillic_General_CI_AS
Uzbekiska (Uzbekistan, latinskt) 0x0443 0x0443 Uzbek_Latin_90_CI_AS
Vietnamesiska (Vietnam) 0x042a 0x042a Vietnamese_CI_AS
Welsh (Storbritannien) 0x0452 0x0452 Latin1_General_CI_AI
Wolof (Senegal) 0x0488 0x040c French_CI_AS
Xhosa/isiXhosa (Sydafrika) 0x0434 0x0409 Latin1_General_CI_AS
Yi (Folkrepubliken Kina) 0x0478 0x0409 Latin1_General_CI_AS
Yoruba (Nigeria) 0x046a 0x0409 Latin1_General_CI_AS
Zulu/isiZulu (Sydafrika) 0x0435 0x0409 Latin1_General_CI_AS

När du har tilldelat en sortering till servern kan du bara ändra den genom att exportera alla databasobjekt och data, återskapa master-databasen och importera alla databasobjekt och data. I stället för att ändra standardsortering för en instans av SQL Server kan du ange önskad sortering när du skapar en ny databas eller databaskolumn.

För att kontrollera serversorteringen för en instans av SQL Server använder du funktionen SERVERPROPERTY:

SELECT CONVERT (NVARCHAR (128), SERVERPROPERTY('collation'));

Om du vill fråga servern efter alla tillgängliga sorteringar använder du följande fn_helpcollations() inbyggd funktion:

SELECT *
FROM sys.fn_helpcollations();

Teckenuppsättningar i Azure SQL Database

Du kan inte ändra eller ange den logiska serversorteringen i Azure SQL Database, men du kan konfigurera varje databassortering både för data och för katalogen. Katalogsortering avgör sortering för systemmetadata, till exempel objektidentifierare. Båda sorteringarna kan anges oberoende av varandra när du skapa databasen i Azure-portaleni T-SQL med CREATE DATABASEi PowerShell med New-AzSqlDatabase.

Sorteringsordningar i Azure SQL Managed Instance

Sortering på servernivå i Azure SQL Managed Instance kan anges när instansen skapas och kan inte ändras senare.

Mer information finns i Ange eller Ändra serversortering.

Sortering på databasnivå

När du skapar eller ändrar en databas kan du använda COLLATE-satsen i instruktionen CREATE DATABASE eller ALTER DATABASE för att ange standarddatabassortering. Om ingen sortering har angetts tilldelas databasen serversortering.

Du kan inte ändra sortering av systemdatabaser om du inte ändrar sortering för servern.

  • I SQL Server och Azure SQL Managed Instance används databassortering för alla metadata i databasen och sorteringen är standard för alla strängkolumner, temporära objekt, variabelnamn och andra strängar som används i databasen.
  • I Azure SQL Database finns det ingen serversortering, så varje databas har en sortering för data och en sortering för katalogen. CATALOG_COLLATION används för alla metadata i databasen och sorteringen är standard för alla strängkolumner, temporära objekt, variabelnamn och andra strängar som används i databasen. Den CATALOG_COLLATION har angetts när den skapas och kan inte ändras.

När du ändrar sortering av en användardatabas kan det uppstå sorteringskonflikter när frågor i databasen får åtkomst till tillfälliga tabeller. Temporära tabeller lagras alltid i tempdb systemdatabas, som använder sortering för instansen. Frågor som jämför teckendata mellan användardatabasen och tempdb kan misslyckas om sorteringarna orsakar en konflikt vid utvärdering av teckendata. Du kan lösa det här problemet genom att ange COLLATE-satsen i frågan. Mer information finns i COLLATE.

Du kan ändra sortering av en användardatabas med hjälp av en ALTER DATABASE-instruktion som liknar följande kodexempel:

ALTER DATABASE myDB COLLATE Greek_CS_AI;

Viktig

Att ändra sortering på databasnivå påverkar inte sortering på kolumnnivå eller uttrycksnivå. Det påverkar inte data i befintliga kolumner.

Du kan hämta den aktuella sorteringen av en databas med hjälp av en instruktion som liknar följande kodexempel:

SELECT CONVERT (NVARCHAR (128), DATABASEPROPERTYEX('database_name', 'collation'));

Sortering på kolumnnivå

När du skapar eller ändrar en tabell kan du ange sortering för varje kolumn med teckensträngar med hjälp av COLLATE-satsen. Om du inte anger någon sortering tilldelas kolumnen standardsortering av databasen.

Du kan ändra sortering av en kolumn med hjälp av en ALTER TABLE-instruktion som liknar följande kodexempel:

ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR (10) COLLATE Greek_CS_AI;

Sortering på uttrycksnivå

Sortering på uttrycksnivå anges när en instruktion körs och de påverkar hur en resultatuppsättning returneras. På så sätt kan ORDER BY sorteringsresultat vara språkspecifika. Om du vill implementera sortering på uttrycksnivå använder du en COLLATE-sats, till exempel följande kodexempel:

SELECT name
FROM customer
ORDER BY name COLLATE Latin1_General_CS_AI;

Platsinställning

En lokalitet är en uppsättning information som är associerad med en plats eller en kultur. Informationen kan innehålla namnet och identifieraren för det talade språket, skriptet som används för att skriva språket och kulturella konventioner. Kollationeringar kan associeras med en eller flera lokala inställningar. För mer information, se lokala ID:n tilldelade av Microsoft.

Kodsida

En kodsida är en ordnad uppsättning tecken i ett visst skript där ett numeriskt index eller kodpunktsvärde associeras med varje tecken. En Windows-kodsida kallas vanligtvis för en teckenuppsättning eller en teckenuppsättning. Kodsidor används för att ge stöd för teckenuppsättningar och tangentbordslayouter som används av olika Windows-systemspråk.

Sorteringsordning

Sorteringsordning anger hur datavärden sorteras. Ordningen påverkar resultatet av datajämförelsen. Data sorteras med hjälp av sorteringsordningar och kan optimeras med hjälp av index.

Unicode-stöd

Unicode är en standard för att mappa kodpunkter till tecken. Eftersom den är utformad för att täcka alla tecken i alla språk i världen behöver du inte olika kodsidor för att hantera olika uppsättningar tecken.

Grunderna i Unicode

Det är svårt att lagra data på flera språk i en databas när du endast använder teckendata och kodsidor. Det är också svårt att hitta en kodsida för databasen som kan lagra alla språkspecifika tecken som krävs. Dessutom är det svårt att garantera korrekt översättning av specialtecken när de läss eller uppdateras av en mängd olika klienter som kör olika kodsidor. Databaser som stöder internationella klienter bör alltid använda Unicode-datatyper i stället för icke-Unicode-datatyper.

Tänk dig till exempel en databas med kunder i Nordamerika som måste hantera tre huvudspråk:

  • Spanska namn och adresser för Mexiko
  • Franska namn och adresser för Quebec
  • Engelska namn och adresser för resten av Kanada och USA

När du bara använder teckenkolumner och kodsidor måste du se till att databasen installeras med en kodsida som hanterar tecknen i alla tre språken. Du måste också se till att garantera korrekt översättning av tecken från något av språken när tecknen läss av klienter som kör en kodsida för ett annat språk.

Anteckning

De kodsidor som en klient använder bestäms av inställningarna för operativsystemet (OS). Om du vill ange klientkodsidor i Windows-operativsystemet använder du regionala inställningar på Kontrollpanelen.

Det skulle vara svårt att välja en kodsida för teckendatatyper som stöder alla tecken som krävs av en global målgrupp. Det enklaste sättet att hantera teckendata i internationella databaser är att alltid använda en datatyp som stöder Unicode.

Unicode-datatyper

Om du lagrar teckendata som återspeglar flera språk i SQL Server (SQL Server 2005 (9.x) och senare) använder du Unicode-datatyper (nchar, nvarcharntext) i stället för icke-Unicode-datatyper (char, varcharoch text).

Anteckning

För Unicode-datatyper kan databasmotorn representera upp till 65 536 tecken med UCS-2 eller hela Unicode-intervallet (1 114 112 tecken) om kompletterande tecken används. Mer information om hur du aktiverar tilläggstecken finns i kompletterande tecken.

Du kan också börja med SQL Server 2019 (15.x), och om en UTF-8-aktiverad sortering (_UTF8) används, betyder det att tidigare icke-Unicode-datatyper (char och varchar) blir Unicode-datatyper med UTF-8-kodning. SQL Server 2019 (15.x) ändrar inte beteendet för tidigare befintliga Unicode-datatyper (nchar, nvarcharoch ntext), som fortsätter att använda UCS-2- eller UTF-16-kodning. Mer information finns i Skillnader i lagring mellan UTF-8 och UTF-16.

Unicode-överväganden

Betydande begränsningar är associerade med icke-Unicode-datatyper. Det beror på att en icke-Unicode-dator är begränsad till att använda en enda kodsida. Du kan få prestanda genom att använda Unicode eftersom det kräver färre kodsidekonverteringar. Unicode-sortering måste väljas individuellt på databas-, kolumn- eller uttrycksnivå eftersom de inte stöds på servernivå.

När du flyttar data från en server till en klient kanske inte din serverns sorteringsordning identifieras av äldre klientdrivrutiner. Detta kan inträffa när du flyttar data från en Unicode-server till en icke-Unicode-klient. Det bästa alternativet kan vara att uppgradera klientoperativsystemet så att de underliggande systemsorteringarna uppdateras. Om klienten har databasklientprogramvara installerad kan du överväga att tillämpa en tjänstuppdatering på databasklientprogramvaran.

Tips

Du kan också försöka använda en annan sorteringsordning för data på servern. Välj en sortering som mappar till en kodsida på klienten. Om du vill använda UTF-16-sorteringarna som är tillgängliga i SQL Server (SQL Server 2012 (11.x) och senare) för att förbättra sökningen och sortering av vissa Unicode-tecken (endast Windows-sortering) kan du välja antingen ett av de kompletterande tecknen (_SC) eller någon av sorteringarna i version 140.

Om du vill använda UTF-8-sorteringarna som är tillgängliga i SQL Server 2019 (15.x) och för att förbättra sökningen och sortering av vissa Unicode-tecken (endast Windows-sortering) måste du välja UTF-8-kodningsaktiverade sortering (_UTF8).

  • UTF8-flaggan kan tillämpas på:

    • Språkliga kollationeringar som redan stöder tilläggstecken (_SC) eller variationsväljarkänslighet (_VSS)
    • "BIN2"-binär sorteringsordning
  • UTF8-flaggan kan inte tillämpas på:

    • Språkliga sorteringsordningar som inte stöder kompletterande tecken (_SC) eller variationsväljarkänslighet (_VSS)
    • BIN binära kollationer
    • SQL_*-teckenuppsättningar

Om du vill utvärdera problem som rör användning av Unicode- eller icke-Unicode-datatyper testar du ditt scenario för att mäta prestandaskillnader i din miljö. Det är en bra idé att standardisera sortering som används på system i hela organisationen och att distribuera Unicode-servrar och -klienter där det är möjligt.

I många situationer interagerar SQL Server med andra servrar eller klienter, och din organisation kan använda flera dataåtkomststandarder mellan program och serverinstanser. SQL Server-klienter är en av två huvudtyper:

  • Unicode-klienter som använder OLE DB- och ODBC-version 3.7 eller senare.
  • icke-Unicode-klienter som använder DB-Library och ODBC version 3.6 eller tidigare.

Följande tabell innehåller information om hur du använder flerspråkiga data med olika kombinationer av Unicode- och icke-Unicode-servrar:

Server Klient Fördelar eller begränsningar
Unicode Unicode Eftersom Unicode-data används i hela systemet ger det här scenariot bästa prestanda och skydd mot skadade hämtade data. Det här är situationen med ActiveX-dataobjekt (ADO), OLE DB och ODBC version 3.7 eller senare.
Unicode Icke-Unicode I det här scenariot, särskilt med anslutningar mellan en server som kör ett nyare operativsystem och en klient som kör en tidigare version av SQL Server, eller på ett äldre operativsystem, kan det finnas begränsningar eller fel när du flyttar data till en klientdator. Unicode-data på servern försöker mappa till en motsvarande kodsida på den icke-Unicode-klienten för att konvertera data.
Icke-Unicode Unicode Det här är inte en idealisk konfiguration för att använda flerspråkiga data. Du kan inte skriva Unicode-data till icke-Unicode-servern. Det är troligt att det uppstår problem när data skickas till servrar som ligger utanför serverns kodsida.
Icke-Unicode Icke-Unicode Det här är ett mycket begränsande scenario för flerspråkiga data. Du kan bara använda en enda kodsida.

Tilläggstecken

Unicode Consortium allokerar till varje tecken en unik kodpunkt, vilket är ett värde i intervallet 000000–10FFFF. De vanligaste tecknen har kodpunktsvärden i intervallet 000000–00FF (65 536 tecken) som passar in i ett 8-bitars eller 16-bitars ord i minnet och på disken. Det här intervallet betecknas vanligtvis som det grundläggande flerspråkiga planet (BMP).

Men Unicode Consortium har upprättat ytterligare 16 "plan" med tecken, var och en samma storlek som BMP. Med den här definitionen kan Unicode representera 1 114 112 tecken (det vill säga 216 * 17 tecken) inom kodpunktsintervallet 000000–10FFFF. Tecken med kodpunktsvärde som är större än 00FFFF kräver två till fyra på varandra följande 8-bitars ord (UTF-8) eller två på varandra följande 16-bitars ord (UTF-16). Dessa tecken utanför BMP kallas kompletterande tecken, och de ytterligare efterföljande 8-bitars eller 16-bitars orden kallas surrogatpar. Mer information om tilläggstecken, surrogater och surrogatpar finns i Unicode Standard-.

SQL Server tillhandahåller datatyper som nchar och nvarchar för att lagra Unicode-data i BMP-intervallet (000000–00FFFF), som databasmotorn kodar med UCS-2.

SQL Server 2012 (11.x) introducerade en ny serie extra teckensortering (_SC) som kan användas med nchar, nvarcharoch sql_variant datatyper för att representera det fullständiga Unicode-teckenintervallet (000000–10FFFF). Till exempel: Latin1_General_100_CI_AS_SC eller, om du använder en japansk sortering, Japanese_Bushu_Kakusu_100_CI_AS_SC.

SQL Server 2019 (15.x) utökar ytterligare teckenstöd till tecken och varchar datatyper med de nya UTF-8-aktiverade sorteringarna (_UTF8). Dessa datatyper kan också representera hela Unicode-teckenintervallet.

Anteckning

Från och med SQL Server 2017 (14.x) stöder alla nya sorteringar automatiskt ytterligare tecken.

Om du använder tilläggstecken:

  • Supplementära tecken kan användas i sorterings- och jämförelseoperationer i sorteringsversioner 90 eller senare.

  • Alla sorteringar i version 100 stöder språklig sortering med tilläggstecken.

  • Tilläggstecken stöds inte för användning i metadata, till exempel i namn på databasobjekt.

  • SC-flaggan kan tillämpas på:

    • Kollationeringar för version 90
    • Version 100 sorteringsordningar
  • SC-flaggan kan inte tillämpas på:

    • Version 80 av Windows-sorteringar utan specifik version
    • Binära kollationer för BIN eller BIN2
    • SQL*-kollationerna
    • Sorteringsordningar för version 140 (dessa behöver inte SC-flaggan eftersom de redan stöder kompletterande tecken)

I följande tabell jämförs beteendet för vissa strängfunktioner och strängoperatorer när de använder tilläggstecken med och utan extra teckenmedveten sortering (SCA):

Strängfunktion eller operator Med en standardiserad SCA-sortering Utan SCA-sortering
CHARINDEX

LEN
PATINDEX
Surrogatparet UTF-16 räknas som en enda kodpunkt. Surrogatparet UTF-16 räknas som två kodpunkter.
VÄNSTER

REPLACE
OMVÄND
HÖGER
DELSTRÄNG
SAKER
Dessa funktioner behandlar varje surrogatpar som en enda kodpunkt och fungerar som förväntat. Dessa funktioner kan dela upp eventuella surrogatpar och leda till oväntade resultat.
NCHAR Returnerar det tecken som motsvarar det angivna Unicode-kodpunktsvärdet i intervallet 0 – 0x10FFFF. Om det angivna värdet ligger i intervallet 0 – 0xFFFF returneras ett tecken. För högre värden returneras motsvarande surrogat. Ett värde som är högre än 0xFFFF returnerar NULL i stället för motsvarande surrogat.
UNICODE Returnerar en UTF-16-kodpunkt i intervallet 0 – 0x10FFFF. Returnerar en UCS-2-kodpunkt i intervallet 0 – 0xFFFF.
Matcha ett tecken med jokertecken

Jokertecken – Tecken som inte ska matchas
Supplementära tecken stöds för alla jokerteckenoperationer. Kompletterande tecken stöds inte för dessa jokerteckenoperationer. Andra jokerteckenoperatorer stöds.

GB18030 stöd

GB18030 är en separat standard som används i Folkrepubliken Kina för kodning av kinesiska tecken. I GB18030 kan tecken vara 1, 2 eller 4 byte långa. SQL Server har stöd för GB18030 kodade tecken genom att känna igen dem när de kommer in på servern från ett program på klientsidan och konverterar och lagrar dem internt som Unicode-tecken. När de har lagrats på servern behandlas de som Unicode-tecken i efterföljande åtgärder.

Du kan använda valfri kinesisk sortering, helst den senaste 100-versionen. Alla sorteringar av version 100 stöder språklig sortering med GB18030 tecken. Om data innehåller tilläggstecken (surrogatpar) kan du använda SC-sorteringarna som är tillgängliga i SQL Server för att förbättra sökningen och sortering.

Anteckning

Se till att dina klientverktyg, till exempel SQL Server Management Studio, använder teckensnittet Dengxian för att korrekt visa strängar som innehåller GB18030 kodade tecken.

Stöd för komplexa skript

SQL Server har stöd för inmatning, lagring, ändring och visning av komplexa skript. Komplexa skript innehåller följande typer:

  • Skript som innehåller kombinationen av text från höger till vänster och från vänster till höger, till exempel en kombination av arabisk och engelsk text.
  • Skript vars tecken ändrar form beroende på deras position eller när de kombineras med andra tecken, till exempel arabiska, indiciska och thailändska tecken.
  • Språk, till exempel thailändska, som kräver interna ordlistor för att känna igen ord eftersom det inte finns några pauser mellan dem.

Databasprogram som interagerar med SQL Server måste använda kontroller som stöder komplexa skript. Standardkontroller för Windows-formulär som skapas i hanterad kod är komplexskriptaktiverade.

Japanska kollationeringar har lagts till i SQL Server 2017

Från och med SQL Server 2017 (14.x) stöds nya japanska sorteringsfamiljer, med permutationer av olika alternativ (_CS, _AS, _KS, _WSoch _VSS), samt _BIN och _BIN2.

Om du vill visa en lista över dessa sorteringar kan du fråga SQL Server Database Engine:

SELECT name,
       description
FROM sys.fn_helpcollations()
WHERE COLLATIONPROPERTY(name, 'Version') = 3;

Alla nya sorteringar har inbyggt stöd för tilläggstecken, så ingen av de nya 140 sorteringar har (eller behöver) SC-flaggan.

Dessa sorteringar stöds i Databasmotorindex, minnesoptimerade tabeller, kolumnlagringsindex och inbyggda kompilerade moduler.

STÖD FÖR UTF-8

SQL Server 2019 (15.x) ger fullständigt stöd för kodning av utf-8-tecken som en import- eller exportkodning och som sortering på databasnivå eller kolumnnivå för strängdata. UTF-8 tillåts i datatyperna tecken och varchar och aktiveras när du skapar eller ändrar ett objekts sortering till en sortering som har suffixet UTF8-. Ett exempel är att ändra Latin1_General_100_CI_AS_SC till Latin1_General_100_CI_AS_SC_UTF8.

UTF-8 är endast tillgängligt för Windows-sorteringar som stöder tilläggstecken (supplementära tecken), som introducerades i SQL Server 2012 (11.x). nchar och nvarchar datatyper tillåter endast UCS-2- eller UTF-16-kodning, och de förblir oförändrade.

Azure SQL Database och Azure SQL Managed Instance stöder även UTF-8 på databas- och kolumnnivå, medan SQL Managed Instance stöder detta även på servernivå.

Lagringsskillnader mellan UTF-8 och UTF-16

Unicode Consortium allokerar till varje tecken en unik kodpunkt, vilket är ett värde i intervallet 000000–10FFFF. Med SQL Server 2019 (15.x) är både UTF-8- och UTF-16-kodningar tillgängliga för att representera hela intervallet:

  • Med UTF-8-kodning kräver tecken i ASCII-intervallet (000000–00007F) 1 byte, kodpunkterna 000080–0007FF kräver 2 byte, kodpunkterna 000800 – 00FFFF kräver 3 byte och kodpunkterna 0010000–0010FFFF kräver 4 byte.
  • Med UTF-16-kodning kräver kodpunkterna 000000–00FFFF 2 byte och kodpunkterna 0010000–0010FFFF kräver 4 byte.

I följande tabell visas kodningslagringsbyte för varje teckenintervall och kodningstyp:

Kodintervall (hexadecimalt) Kodintervall (decimal) Lagringsbyte 1 med UTF-8 Lagringsbyte 1 med UTF-16
000000 - 00007F 0 - 127 1 2
000080 - 00009F
0000A0 – 0003FF
000400 – 0007FF
128 - 159
160 - 1,023
1,024 - 2,047
2 2
000800 – 003FFF
004000 – 00FFFF
2,048 - 16,383
16,384 - 65,535
3 2
010000 – 03FFFF 2

040000 – 10FFFF 2
65 536 – 262 143 2
262 144 - 1 114 111 2
4 4

1Lagringsbyte referera till den kodade bytelängden, inte lagringsstorleken för datatypen på disken. Mer information om lagringsstorlekar på disk finns i nchar och nvarchar samt char och varchar.

2 Kodpunktsintervallet för kompletterande tecken.

Tips

Det är en vanlig uppfattning i char och varchar eller i nchar och nvarchar, att n definierar antalet tecken. Det beror på att i exemplet med en tecken(10) kolumn kan 10 ASCII-tecken i intervallet 0–127 lagras med hjälp av en sortering, till exempel Latin1_General_100_CI_AI, eftersom varje tecken i det här intervallet endast använder 1 byte. Men i char och varchardefinierar n strängstorleken i byte (0–8 000), och i nchar och nvarchardefinierar n strängstorleken i par av byte (0–4 000). n definierar aldrig antal tecken som kan lagras.

Om du väljer rätt Unicode-kodning och datatyp kan det ge dig betydande lagringsbesparingar eller öka ditt aktuella lagringsfotavtryck, beroende på vilket tecken som används. När du till exempel använder en latinsk sortering som är UTF-8 aktiverad, till exempel Latin1_General_100_CI_AI_SC_UTF8, lagrar en tecken(10) kolumn 10 byte och kan innehålla 10 ASCII-tecken i intervallet 0–127. Men den kan bara innehålla fem tecken i intervallet 128 – 2047 och endast tre tecken i intervallet 2048 – 65535. Eftersom en nchar(10) kolumn lagrar 10 bytepar (20 byte) kan den innehålla 10 tecken i intervallet 0–65535.

Innan du bestämmer dig för om du vill använda UTF-8- eller UTF-16-kodning för en databas eller kolumn bör du överväga fördelningen av strängdata som ska lagras:

  • Om det mest är i ASCII-intervallet 0–127 (till exempel engelska) kräver varje tecken 1 byte med UTF-8 och 2 byte med UTF-16. Användning av UTF-8 ger lagringsfördelar. Om du ändrar en befintlig kolumndatatyp med ASCII-tecken i intervallet 0–127 från nchar(10) till tecken(10)och med hjälp av en UTF-8-aktiverad sortering innebär det en 50-procentig minskning av lagringskraven. Den här minskningen beror på att nchar(10) kräver 20 byte för lagring, jämfört med tecken(10), vilket kräver 10 byte för samma Unicode-strängrepresentation.
  • Ovanför ASCII-intervallet kräver nästan alla latinska skript och grekiska, kyrilliska, koptiska, armeniska, hebreiska, arabiska, syriska, tāna och N'Ko 2 byte per tecken i både UTF-8 och UTF-16. I dessa fall finns det inga betydande lagringsskillnader för jämförbara datatyper (till exempel mellan att använda tecken eller nchar).
  • Om det mest är östasiatiska skript (till exempel koreanska, kinesiska och japanska) kräver varje tecken 3 byte med UTF-8 och 2 byte med UTF-16. Användning av UTF-16 ger lagringsfördelar.
  • Tecken i intervallet 010000 –10FFFF kräver 4 byte i både UTF-8 och UTF-16. I dessa fall finns det inga lagringsskillnader för jämförbara datatyper (till exempel mellan att använda tecken eller nchar).

Andra överväganden finns i Write International Transact-SQL Statements.

Konvertera till UTF-8

Eftersom i tecken och varchar eller i nchar och nvarchardefinierar n bytelagringsstorleken, inte antalet tecken som kan lagras, är det viktigt att fastställa den datatypstorlek som du måste konvertera till. De tecken som överskrider storleken ska trunkeras.

Anta till exempel att en kolumn definieras som nvarchar(100) som lagrar 180 byte japanska tecken. I det här exemplet kodas kolumndata för närvarande med UCS-2 eller UTF-16, som använder 2 byte per tecken. Att konvertera kolumntypen till varchar(200) räcker inte för att förhindra datatrunkering, eftersom den nya datatypen bara kan lagra 200 byte, men japanska tecken kräver 3 byte när de kodas i UTF-8. Kolumnen måste definieras som varchar(270) för att undvika dataförlust via datatrunkering.

Därför måste du i förväg veta vilken beräknad bytestorlek för kolumndefinitionen är innan du konverterar befintliga data till UTF-8 och justerar den nya datatypens storlek i enlighet med detta. Se Transact-SQL-skriptet eller SQL Notebook i GitHub-Dataexempel som använder funktionen DATALENGTH och uttrycket COLLATE för att fastställa lämpliga datalängdskrav för UTF-8-konverteringar i en befintlig databas.

Om du vill ändra kolumnsortering och datatyp i en befintlig tabell använder du någon av metoderna som beskrivs i Ange eller Ändra kolumnsortering.

Om du vill ändra databassortering, tillåta att nya objekt ärver databassortering som standard eller ändra serversortering, så att nya databaser kan ärva systemsortering som standard, kan du läsa avsnittet Relaterade uppgifter i den här artikeln.

Uppgift Artikel
Beskriver hur du ställer in eller ändrar sortering av instansen av SQL Server. Om du ändrar serversortering ändras inte sortering av befintliga databaser. Ange eller ändra serverns teckenuppsättning
Beskriver hur du anger eller ändrar sortering av en användardatabas. Om du ändrar en databassortering ändras inte sortering av befintliga tabellkolumner. Ange eller ändra databassortering
Beskriver hur du anger eller ändrar sortering av en kolumn i databasen. ange eller ändra kolumnsortering
Beskriver hur du returnerar sorteringsinformation på server-, databas- eller kolumnnivå. Visa teckenuppsättningsinformation
Beskriver hur du skriver Transact-SQL-instruktioner som är mer portabla från ett språk till ett annat, eller stöder flera språk enklare. Write International Transact-SQL Statements
Beskriver hur du ändrar språket för felmeddelanden och inställningar för hur datum, tid och valutadata används och visas. ange ett sessionsspråk