Подтвердить что ты не робот

Почему сервер sql хранит символы вопросительного знака вместо японских символов в полях NVarchar?

Я пытаюсь сохранить японские символы в полях nvarchar в моей базе данных SQL Server 2000.

Когда я запускаю инструкцию update, например:

update blah 
set address = N'スタンダードチャ'
where key_ID = 1

из SQL Server Management Studio, затем запустите оператор select, я вижу только вопросительные знаки, возвращенные в окно результатов. Я вижу те же вопросительные знаки на веб-странице, которые смотрят на базу данных.

Кажется, это проблема с правильной сохранностью данных? Может ли кто-нибудь сказать мне, что мне нужно сделать по-другому?

4b9b3361

Ответ 1

Вам нужно проверить параметры глобализации всего кода, который имеет дело с этими данными, из базы данных, доступа к данным и слоев представления. Это включает SSMS.

(Вам также нужно решить, какую версию вы используете, 2003 не существует...)

Ответ 2

Это не может быть правильным ответом на ваш пример, но самая распространенная причина, по которой я видел, - это то, что строковым литералам не нужен префикс unicode N.

Итак, вместо

set address = N'スタンダードチャ'

можно попытаться записать в поле nvarchar без префикса unicode

set address = 'スタンダードチャ'

См. также: N префикс перед строкой в ​​запросе Transact-SQL

Ответ 3

Я столкнулся с этой же проблемой при использовании символов индийского языка при сохранении в полях DB nvarchar. Затем я просмотрел эту статью в Microsoft -

http://support.microsoft.com/kb/239530

Я последовал за этим, и моя проблема с unicode была решена. В этой статье они говорят: "Вы должны предшествовать всем строкам Unicode с префиксом N, когда имеете дело со строковыми константами Unicode в SQL Server

Поддержка Unicode SQL Server

Типы данных SQL Server Unicode поддерживают кодировку UCS-2. Типы данных Unicode хранят символьные данные, используя два байта для каждого символа, а не один байт. В двух байтах имеется 65 536 различных битовых шаблонов, поэтому Unicode может использовать один стандартный набор битовых шаблонов для кодирования каждого символа на всех языках, включая такие языки, как китайцы, которые имеют большое количество символов.

В SQL Server типы данных, которые поддерживают данные Unicode:

nchar
nvarchar
nvarchar(max) – new in SQL Server 2005
ntext

Использование nchar, nvarchar, nvarchar (max) и ntext такое же, как char, varchar, varchar (max) и текст, за исключением:

- Unicode supports a wider range of characters.
- More space is needed to store Unicode characters.
- The maximum size of nchar and nvarchar columns is 4,000 characters, not 8,000     characters like char and varchar.
- Unicode constants are specified with a leading N, for example, N'A Unicode string'

Информация в данной статье относится к следующим продуктам.

Microsoft SQL Server 7.0 Standard Edition
Microsoft SQL Server 2000 Standard Edition
Microsoft SQL Server 2005 Standard Edition
Microsoft SQL Server 2005 Express Edition
Microsoft SQL Server 2005 Developer Edition
Microsoft SQL Server 2005 Enterprise Edition
Microsoft SQL Server 2005 Workgroup Edition

Ответ 4

вам нужно написать N перед строковым значением. например, INSERT INTO LabelManagement (KeyValue) ЦЕННОСТИ (N '変 更 命令'); Здесь я сохраняю значение на японском языке, и я добавил N перед символом строки. Я использую сервер Sql 2014. Надеюсь, вы найдете решение. Наслаждайтесь.

Ответ 5

SSMS не отобразит это правильно, вы можете увидеть вопросительные знаки или поля

вставьте результаты в слово, и они должны быть на японском языке

На веб-странице вам нужно установить Content-Type, в приведенном ниже коде будет отображаться китайский Big5

<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=big5"> 

Чтобы проверить данные, вы не можете использовать ascii, поскольку ascii может видеть только набор символов ascii

запустите это

выберите unicode (адрес), ascii (адрес) от blah, где key_ID = 1

Вывод должен быть следующим (он смотрит только на первый символ) 12473 63

Ответ 6

Я почти гарантирую, что тип данных не является unicode. Если вы хотите узнать больше, вы можете проверить Википедию для получения информации о Unicode, ASCII и ANSI. Unicode может хранить больше уникальных символов, но занимает больше места для хранения, передачи и обработки. Также некоторые программы и другие вещи не поддерживают юникод. Типы данных Unicode для MS SQL - это "nchar", "nvarchar" и "ntext".

Ответ 7

Мы используем Microsoft SQL Server 2008 R2(SP3). Наша таблица сортировки указана как SQL_Latin1_General_CP1_CI_AS. У меня есть мои типы, заданные как n сорт

nvarchar(MAX)
nchar(2)

.. и т.д.

Чтобы вставить японские символы, я префикс строки с капиталом N

N'素晴らしい一日を'

Работает как шарм.

Ответ 8

Код абсолютно прав. Вы можете вставить строку unicode с префиксом N в поле, объявленное как NVARCHAR. Итак, вы можете проверить, является ли Адрес столбцом NVARCHAR. Протестировал приведенный ниже код в SQL Server 2008R2, и он сработал.

update blah 
set address = N'スタンダードチャ'
where key_ID = 1

введите здесь описание изображения