Я использую Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64)
Aug 22 2017 17:04:49
Copyright (C) 2017 Microsoft Corporation
Developer Edition (64-bit) on Windows Server 2012 R2 Standard Evaluation 6.3 <X64> (Build 9600: ) (Hypervisor)
Когда я делаю: INSERT INTO MYTABLE(COLNAME) VALUES ('Қазақстан')
, он вставляет вопросительные знаки ?????????
вместо фактической строки. Мой тип столбца - NVARCHAR(255)
. Если я вставлю символ N
перед своим значением, например: ...(N'Қазақстан')
, он будет сохранен правильно. Это единственный способ вставить символы, отличные от ASCII, или мне нужно что-то изменить?
Спасибо!
В Sql Server строковые литералы Unicode должны иметь префикс N
.
Как вы выполняете запрос? В скрипте, хранимой процедуре, клиентском коде? В общем, вы должны использовать параметризованные запросы вместо жестко заданных строк. Если вы не можете, строковые литералы Unicode должны иметь префикс N
.
@Panagiotis Kanavos Я просто вставляю и выбираю в SQL Developer.
Ответ на ваш вопрос: да, вам следует использовать N
.
От Документы
When prefixing a string constant with the letter N, the implicit conversion will result in a UCS-2 or UTF-16 string if the constant to convert does not exceed the max length for the nvarchar string data type (4,000). Otherwise, the implicit conversion will result in a large-value nvarchar(max).
Поэтому, если вы не используете N
, SQL Server будет рассматривать его как VARCHAR
(не Unicode).
Использование N
преобразует строку в строку Unicode.