Beskrivning av UTF-8-data lagras i SQL Server

Sammanfattning

Vissa program (särskilt sådana som är webbaserad) måste hantera Unicode-data som är kodade med UTF-8 krypteringsmetod. SQL Server 7.0 och SQL Server 2000 använder en annan Unicode-kodning (UCS-2) och känner igen inte UTF-8 som giltig teckendata. Den här artikeln beskrivs några alternativ för att hantera den här situationen.

Mer Information

Unicode-data kan kodas på många olika sätt. UCS-2 och UTF-8 är två vanliga sätt att lagra bit-mönster som representerar Unicode-tecken. Microsoft Windows NT, SQL Server, Java, COM, och SQL Server ODBC-drivrutinen och OLEDB-provider alla representerar internt Unicode-data som UCS-2.

Alternativ för att använda SQL Server 7.0 eller SQL Server 2000 som en backend-servern för ett program som skickar och tar emot Unicode-data kodas som UTF-8 omfattar:

  1. Om programmet använder Active Server Pages (ASP) och du använder IIS (Internet Information Server) (IIS) 5.0 och Microsoft Windows 2000, kan du lägga till ”< % Session.Codepage=65001% >” din ASP-skript på serversidan. Detta instruerar IIS att konvertera alla dynamiskt genererad strängar (exempel: Response.Write) från UCS-2 och UTF-8 automatiskt innan de skickas till klienten.

    Om du inte vill aktivera sessioner kan du också använda SSI-direktiv ”< % @ CodePage = 65001% >”.

    UTF-8-data som skickas från klienten till servern via GET eller POST konverteras även automatiskt till UCS-2. Egenskapen Session.Codepage är den rekommenderade metoden att hantera UTF-8-data i ett webbprogram. Den här inställningen för Codepage är inte tillgänglig i IIS 4.0 och Windows NT 4.0. Mer information finns i följande artikel i Microsoft Knowledge Base:

    254313 felmeddelande: Active Server Pages-fel ' ASP 0203' ogiltig kod

  2. Översätta till och från UCS-2 och UTF-8 efter behov i programmet. Exempelkod för den här typen av konvertering finns på Unicode Consortium-webbplats:

    ftp://ftp.unicode.org/Public/PROGRAMS/CVTUTF/En övergripande beskrivning av algoritmen för att konvertera UCS-2 till UTF-8 finns i dokumentet RFC2279 Internet begär för kommentarer.

    På Windows NT eller Windows 2000 kan du använda funktionerna Win32 MultiByteToWideChar och WideCharToMultiByte konvertera UTF-8 till och från UCS-2 genom att skicka en konstant CP_UTF8 (65001) som den första parametern till funktion.

  3. Ändra programmet för användning med UCS-2 i stället för UTF-8-kodning.

  4. Faktiska UTF-8-data lagras på servern med hjälp av binär-VARBINARY-avbildning kolumner. UTF-8-datalagring på SQL Server innebär att du inte kan använda SQL Server att sortera eller söka efter intervall med dessa värden som om data hade giltig teckendata. Typer av åtgärder på kolumner som innehåller data för UTF-8 som inte skulle ger förväntade resultat är ”ORDER BY”, större-än ”>” och mindre-än ”<” jämförelser och inbyggda SQL Server manipulering strängfunktioner som SUBSTRING().

    Jämställdhet jämförelser fungerar så länge de strängar som jämförs är likvärdiga på en byte-nivå. Observera att om du sparar data i UTF-8 i SQL Server inte bör du använda tecknet kolumner (VARCHAR-CHAR/NCHAR- och så vidare). UTF-8 är inte ett giltigt teckendata till SQL Server och genom att lagra data för icke-tecken i teckenkolumner riskerar du stöter på problem som de problem som beskrivs i följande artiklar i Microsoft Knowledge Base:

    155723 INF: SQL Server trunkering av en DBCS-sträng

    234748 PRB: SQL Server ODBC-drivrutinen konverterar språk händelser till Unicode
    Om du funderar på det här alternativet Kom ihåg att om du någonsin behöver tillgång till UTF-8-data som lagras i SQL Server från något annat program än webbläsare (till exempel från ett icke-webbaserat ODBC-program) behöver du göra en konvertering från UTF-8 till UCS-2 inom det här programmet som ODBC, OLEDB, COM, Win32 API-anrop, VB och C fungerar runtime strängfunktioner modifiering inte med UTF-8. Bevisbördan för översättning flyttas till ett annat program.

  5. Om dina krav inte inkluderar behöver lagra data från en kombination av språk som inte kan tillgodoses genom en enda teckentabell, kanske du inte behöver använda Unicode.

Unicode-stöd infördes till SQL Server med SQL Server 7.0. Eftersom SQL Server 6.5 inte stöder lagring av Unicode-data, beskrivs endast alternativen för SQL Server 6.5 i steg 4 och 5.

Behöver du mer hjälp?

Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Microsoft Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×