Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedź (1)

  • 5

Odpowiedź na to pytanie jest dość skomplikowana i zależy od kilku parametrów, dlatego zilustruję ją prostym przykładem.

Utwórzmy poligon w postaci tabelki:

 

CREATE TABLE Atkom_Collation (AcID int IDENTITY(1,1)
, Nazwisko_un nvarchar(50)
, Nazwisko_lt varchar(50) COLLATE Latin1_General_CI_AI
, Nazwisko_pl varchar(50) COLLATE Polish_CI_AS 
, Nazwisko_jp varchar(50) COLLATE Japanese_CI_AS_KS
);

 

Tabela posiada 4 pola tekstowe, jedno UNICODE i 3 z kodowaniem nie UNICODE, dla tych 3 kolumn ustawiłem różne wartości właściwości COLLATE.

Teraz wypełnijmy ją danymi zawierającymi różne zestawy znaków.

 

 

DECLARE @Nazwisko_un nvarchar(50);
DECLARE @Nazwisko varchar(50);

SET @Nazwisko_un=N'Środa-u';
SET @Nazwisko='Środa-n';


INSERT INTO Atkom_Collation (Nazwisko_un,Nazwisko_lt, Nazwisko_pl, Nazwisko_jp)
VALUES (@Nazwisko_un,@Nazwisko_un,@Nazwisko_un,@Nazwisko_un),
		(@Nazwisko,@Nazwisko,@Nazwisko,@Nazwisko);

SET @Nazwisko_un=N'Miércolesũ-u';
SET @Nazwisko='Miércolesũ-n';


INSERT INTO Atkom_Collation (Nazwisko_un,Nazwisko_lt, Nazwisko_pl, Nazwisko_jp)
VALUES (@Nazwisko_un,@Nazwisko_un,@Nazwisko_un,@Nazwisko_un),
		(@Nazwisko,@Nazwisko,@Nazwisko,@Nazwisko);


SET @Nazwisko_un=N'水曜日-u';
SET @Nazwisko='水曜日-n';


INSERT INTO Atkom_Collation (Nazwisko_un,Nazwisko_lt, Nazwisko_pl, Nazwisko_jp)
VALUES (@Nazwisko_un,@Nazwisko_un,@Nazwisko_un,@Nazwisko_un),
		(@Nazwisko,@Nazwisko,@Nazwisko,@Nazwisko);

 

 

Do wypełnienia tabeli wykorzystaliśmy 2 zmienne: jedną z typem danych UNICODE i drugą nie UNICODE. Dla ułatwienia analizy wyników do każdego zestawu danych dodałem sufiks '-u', gdy wykorzystywałem zmienną UNICODE i '-n' gdy wykorzystywałem zmienną nie UNICODE.

Do tabeli dodałem 6 rekordów, w 3 parach, korzystając z różnego zestawu znaków.

Zobaczmy, jaki był rezultat tego eksperymentu.

 

 

SELECT *
FROM Atkom_Collation

 

 

W wyniku otrzymałem:

 

 

Przeanalizujmy otrzymane dane.

Dla danych UNICODE wartość właściwości COLLATE nie ma żadnego znaczenia dla wartości wprowadzanych znaków. Natomiast w przypadku danych typu nie UNICODE w zależności od wartości właściwości COLLATE różne znaki są prezentowane w różny sposób, czyli jeżeli taki znak występuje we wskazanym zestawie znaków jest on przechowywany tak, jak został wprowadzony. Jeżeli takiego znaku nie ma, ale można go rzutować na znak występujący w danym zestawie, znak zostanie zastąpiony, jeżeli natomiast taki znak nie występuje w danym zestawie oraz nie można go rzutować na inny znak, zostanie on zastąpiony przez znak '?'. 

W powyższym przykładzie należy pamiętać, że dane dodawaliśmy za pomocą zmiennej, co oznacza, że one też miały swoją wartość właściwości COLLATE odziedziczone po instancji serwera.

  • Odpowiedział
  • @ | 31.05.2014
  • TRENER ALTKOM AKADEMII
Komentarze