Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Możesz zastąpić sortowanie bazy danych dla char, varchar, text, nchar, nvarchari ntext danych przez określenie innego sortowania dla specyficznej kolumny w tabeli i użycie jednej z następujących wartości:
klauzula COLLATE dla instrukcji CREATE TABLE i ALTER TABLE, jak pokazano w poniższych przykładach.
Konwersja w miejscu. Rozważ jedną z istniejących tabel zdefiniowanych poniżej:
-- NVARCHAR column is encoded in UTF-16 because a supplementary character enabled collation is used CREATE TABLE dbo.MyTable (CharCol NVARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC); -- VARCHAR column is encoded the Latin code page and therefore is not Unicode capable CREATE TABLE dbo.MyTable (CharCol VARCHAR(50) COLLATE Latin1_General_100_CI_AI);
Aby bezpośrednio przekonwertować kolumnę do użycia UTF-8, uruchom instrukcję
ALTER COLUMN
, która ustawia wymagany typ danych i sortowanie z obsługą UTF-8.ALTER TABLE dbo.MyTable ALTER COLUMN CharCol VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8
Ta metoda jest łatwa do zaimplementowania, jednak jest to prawdopodobnie operacja blokująca, która może stać się problemem dla dużych tabel i zajętych aplikacji.
Skopiuj i zastąp. Rozważ jedną z istniejących tabel zdefiniowanych poniżej:
-- NVARCHAR column is encoded in UTF-16 because a supplementary character enabled collation is used CREATE TABLE dbo.MyTable (CharCol NVARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC); GO -- VARCHAR column is encoded using the Latin code page and therefore is not Unicode capable CREATE TABLE dbo.MyTable (CharCol VARCHAR(50) COLLATE Latin1_General_100_CI_AI); GO
Aby przekonwertować kolumnę w celu użycia formatu UTF-8, skopiuj dane do nowej tabeli, w której kolumna docelowa jest już wymaganym typem danych i sortowaniem z włączoną obsługą protokołu UTF-8, a następnie zastąp starą tabelę:
CREATE TABLE dbo.MyTableNew (CharCol VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8); GO INSERT INTO dbo.MyTableNew SELECT * FROM dbo.MyTable; GO DROP TABLE dbo.MyTable; GO EXEC sp_rename 'dbo.MyTableNew', 'dbo.MyTable'; GO
Ta metoda jest znacznie szybsza niż konwersja w miejscu, ale obsługa złożonych schematów z wieloma zależnościami (FKs, PKs, Triggers, DFs) i synchronizowanie ogona tabeli (jeśli baza danych jest używana) wymaga więcej planowania.
Aby uzyskać więcej informacji, zobacz Sortowanie i obsługa Unicode.
SQL Server Management Studio. Aby uzyskać więcej informacji, zobacz Modyfikowanie kolumn (silnik bazy danych).
Za pomocą właściwości Column.Collation w obiektach zarządzania serwerem SQL (SMO).
Nie można zmienić sortowania kolumny, do której obecnie odwołuje się jeden z następujących elementów:
- Kolumna obliczana
- Indeks
- Statystyki dystrybucji generowane automatycznie lub przez instrukcję
CREATE STATISTICS
- Ograniczenie CHECK
- Ograniczenie klucza obcego
Podczas pracy z tempdbklauzula COLLATE zawiera opcję database_default, aby określić, że kolumna w tabeli tymczasowej używa domyślnego sortowania z bieżącej bazy danych użytkownika w kontekście połączenia zamiast sortowania tempdb.
Porządki sortowania i kolumny tekstowe
Można wstawić lub zaktualizować wartości w kolumnie tekstowej , której sortowanie różni się od strony kodowej domyślnego sortowania bazy danych. Program SQL Server niejawnie konwertuje wartości na sortowanie kolumny.
Sortowania i baza danych tempdb
Baza danych bazy danych tempdb jest tworzona za każdym razem, gdy program SQL Server jest uruchamiany i ma takie samo sortowanie domyślne jak model bazy danych. Zazwyczaj jest to samo, co domyślne sortowanie wystąpienia. W przypadku utworzenia bazy danych użytkownika i określenia innego domyślnego sortowania niż model baza danych użytkownika ma inne domyślne sortowanie niż tempdb. Wszystkie tymczasowe procedury przechowywane lub tabele tymczasowe są tworzone i przechowywane w tempdb. Oznacza to, że wszystkie niejawne kolumny w tabelach tymczasowych oraz wszystkie wymuszane domyślne stałe, zmienne i parametry w tymczasowych procedurach składowanych mają reguły sortowania, które różnią się od porównywalnych obiektów utworzonych w tabelach permanentnych i procedurach składowanych.
Może to prowadzić do problemów z niezgodnością sortowania między zdefiniowanymi przez użytkownika bazami danych i systemowymi obiektami bazy danych. Na przykład instancja SQL Server używa sortowania Latin1_General_CS_AS i wykonuje następujące instrukcje:
CREATE DATABASE TestDB COLLATE Estonian_CS_AS;
USE TestDB;
CREATE TABLE TestPermTab (PrimaryKey int PRIMARY KEY, Col1 nchar );
W tym systemie baza danych tempdb używa sortowania Latin1_General_CS_AS ze stroną kodów 1252, a TestDB
i TestPermTab.Col1
używają sortowania Estonian_CS_AS
ze stroną kodów 1257. Na przykład:
USE TestDB;
GO
-- Create a temporary table with the same column declarations
-- as TestPermTab
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar );
INSERT INTO #TestTempTab
SELECT * FROM TestPermTab;
GO
W poprzednim przykładzie baza danych tempdb używa sortowania Latin1_General_CS_AS, a TestDB
i TestTab.Col1
używa sortowania Estonian_CS_AS
. Na przykład:
SELECT * FROM TestPermTab AS a INNER JOIN #TestTempTab on a.Col1 = #TestTempTab.Col1;
Ponieważ tempdb używa domyślnego sortowania serwera, a TestPermTab.Col1
używa innego sortowania, program SQL Server zwraca ten błąd: "Nie można rozwiązać konfliktu sortowania między Latin1_General_CI_AS_KS_WS a Estonian_CS_AS w operacji porównania".
Aby zapobiec temu błędowi, możesz użyć jednej z następujących alternatyw:
Określ, że kolumna w tabeli tymczasowej używa domyślnego sortowania bazy danych użytkownika, a nie tempdb. Dzięki temu tabela tymczasowa może pracować z podobnie sformatowanymi tabelami w wielu bazach danych, jeśli jest to wymagane przez system.
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar COLLATE database_default );
Określ poprawne sortowanie dla kolumny
#TestTempTab
:CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar COLLATE Estonian_CS_AS );
Zobacz też
Ustaw lub zmień kolację serwera
Ustaw lub zmień sortowanie bazy danych
Sortowanie i obsługa Unicode