Почему в полях NVarchar сервер sql хранит символы вопроса вместо японских символов? - PullRequest
26 голосов
/ 17 апреля 2009

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

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

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

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

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

Ответы [ 8 ]

93 голосов
/ 04 февраля 2010

Это не может быть правильным ответом для вашего примера, но наиболее распространенная причина, которую я видел, состоит в том, что строковым литералам не требуется префикс Unicode N.

Итак, вместо

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

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

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

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

12 голосов
/ 09 апреля 2014

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

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

Я следовал этому, и моя проблема с юникодом была решена. В этой статье они говорят - Вы должны предшествовать всем строкам Юникода с префиксом N , когда вы имеете дело со строковыми константами Юникода в SQL Server

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

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

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

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

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

- 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 голосов
/ 17 апреля 2009

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

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

2 голосов
/ 03 ноября 2015

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

1 голос
/ 28 июня 2010

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

1 голос
/ 17 апреля 2009

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

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

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

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

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

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

выберите юникод (адрес), ascii (адрес) от бла где key_ID = 1

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

0 голосов
/ 21 августа 2017

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

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

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

0 голосов
/ 04 апреля 2017

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

nvarchar(MAX)
nchar(2)

.. и т.д.

Для вставки японских символов я ставлю строку с заглавной буквы N

N'素晴らしい一日を'

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...