W pytaniu nie ma zbyt wielu informacji. Wiemy tylko, że:
- Kolumna używa sortowania
Thai_CI_AS
(przynajmniej to brzmi tak, jakby pytanie brzmi) - Przekazywane są tajskie znaki
- Co jest przechowywane w kolumnie to:
???
Jednak już z tego możemy wywnioskować dwie rzeczy:
-
Przychodzący ciąg nie jest ani
NVARCHAR
parametr / zmienna ani nie jest to literał ciągu znaków poprzedzony wielką literą „N”,i
-
Domyślne sortowanie bazy danych, w której wykonywane jest zapytanie (niekoniecznie bazy danych, w której istnieje tabela) to nie tajskie zestawienie.
Nie wiemy, czy kolumna docelowa to VARCHAR
lub NVARCHAR
, ale nie ma to znaczenia, jeśli sortowanie kolumny jest sortowaniem tajskim (ponieważ umożliwi to VARCHAR
dane do przechowywania znaków tajskich i NVARCHAR
zadziała niezależnie).
Jeśli albo :
-
przychodzący ciąg używa
NVARCHAR
parametr (lub jeśli literał ciągu, to przedrostek z wielką literą "N"),lub
-
zapytanie zostało wykonane w bazie danych, która ma domyślne sortowanie w języku tajskim
wtedy znaki tajskie zostaną zapisane zgodnie z oczekiwaniami.
Poniższy przykład ilustruje to zachowanie. Używam Tajskiego znaku Khomuta U+0E5B
na instancji mającej kod Korean_100_CS_AS_KS_WS_SC
Domyślne sortowanie na poziomie instancji. Kolumna docelowa ma sortowanie Thai_CI_AS
. Po pierwsze, „bieżąca” baza danych nie mają domyślne sortowanie w języku tajskim, dodaję znak dwa razy:raz z prefiksem "N" i raz bez prefiksu w literale ciągu:
USE [tempdb];
-- DROP TABLE #Thai;
CREATE TABLE #Thai (ID INT IDENTITY(1, 1), Col1 VARCHAR(50) COLLATE Thai_CI_AS);
-- In a DB with a non-Thai default Collation:
INSERT INTO #Thai (Col1) VALUES ('๛');
INSERT INTO #Thai (Col1) VALUES (N'๛');
Następnie przełączam się na bazę danych, która robi mieć domyślne sortowanie w języku tajskim i wstawić tylko ciąg bez prefiksu (nie ma potrzeby ponownego testowania ciągu z prefiksem "N"):
USE [other_db];
-- In a DB with a Thai default Collation:
INSERT INTO #Thai (Col1) VALUES ('๛');
SELECT * FROM #Thai;
Wynik:
ID Col1
1 ?
2 ๛
3 ๛
Jak widać (punkt # poniżej odnosi się do ID # w wynikach powyżej):
- Ciąg bez prefiksu "N", używany w bazie danych używającej domyślnego sortowania innego niż tajski, został przetłumaczony na
?
- Ciąg z przedrostkiem "N", używany również w bazie danych używającej domyślnego sortowania innego niż tajski, przechowywał wartość poprawnie
- Ciąg bez prefiksu "N", używany w bazie danych, która ma domyślne sortowanie w języku tajskim, przechowuje wartość poprawnie