2010-09-15 3 views
1

Я пишу еще раз о проблеме с кодировкой ... Теперь с некоторыми образцами кода.Sql server 2005 с проблемой кодирования ASP.NET

В двух словах: при сохранении входных данных базы данных некоторые языковые специальные символы, такие как polish 'ń', не будут сохраняться - insted 'n' сохраняется. С другой стороны, строка: Adams æbler, с æ сохраняется.

Вот код begind код, который действительно экономит материал и отображает данные:

Default.aspx имеет мета-тег:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

Таблица выглядит следующим образом:

CREATE TABLE [dbo].[Users]([Surname] [nvarchar](50) COLLATE Latin1_General_CI_AI NULL) ON [PRIMARY] 

Я не знаю, что еще нужно для решения проблемы. Помогите оценить.

Спасибо, Paweł

+0

Ах, когда я выпустил: SELECT Фамилия, CAST (Фамилия AS VARBINARY (30)) AS Expr1 от пользователей , байты для alledged 'ń' имеют 0x6E00, поэтому в базе данных сохраняется символ 'n'. – dragonfly

+0

Имеет ли 'Surnme.Text' правильное значение, если вы отлаживаете' Button1_Click'? Какое значение, по-видимому, отправляется на SQL Server, если вы используете SQL Profiler? –

+0

Да. Surname.Text имеет правильное значение. Также проверять его с помощью Encoding.Unicode.GetBytes возвращает «хорошие» байты. Я еще не проверил его с профилировщиком. – dragonfly

ответ

0

Наконец-то я понял, что не так. Я пропустил N префикса перед строкой (он помечает строку как UNICODE):

command.CommandText = "INSERT INTO users VALUES(N'" + Surname.Text + "')"; 

Спасибо, Paweł

1

Ваше определение таблицы, как представляется, проблема. Фамилия определяется с помощью COLLATE Latin1_General_CI_AI. Элемент AI указывает на отсутствие акцента. Для сохранения данных вам нужно будет изменить сортировку на Latin1_General_CI_AS.