Как правильно кодировать иностранные символы с акцентом в приложении ASP.NET MVC / SQL (примеры C-R-U, пожалуйста) - PullRequest
2 голосов
/ 15 июня 2011

Как лучше всего читать / сохранять / обновлять акцентированные символы с помощью HTML / MVC / LINQ-to-SQL?

У нас есть веб-приложение, в которое пользователи подают статьи со всего мира. Некоторые пользователи, особенно европейские, представляют статьи с акцентированными / расширенными символами. Мы используем Linq to SQL, C #, SQL 2005. Все наши таблицы базы данных нормализованы, а Linq to SQL используется в качестве слоя отображения данных.

Ошибка, которую мы хотим исправить, заключается в том, что в нашем приложении MVC3 / SQL 2005 акцентированные символы в словах передаются пользователями с помощью обычного

using (Html.BeginForm()) {... }
Блок

для атрибутивного контроллера [HttpPost] отображается как '?' на мероприятии Сохранить. Например, все работает хорошо, пока не введены иностранные символы, и в этом случае у нас может быть запись, которая говорит о «проверенных действиях» в БД.

Какова лучшая практика для их кодирования в MVC3, SQL2005-иш?

Я был бы очень признателен, если бы кто-то обрисовал в общих чертах операции создания, чтения и обновления для чего-то подобного или сказал бы, что за волшебство мне не хватает. Спасибо за любой совет!

1 Ответ

3 голосов
/ 15 июня 2011

Вам необходимо использовать

  • типов nvarchar (не varchar)
  • литералов с префиксом N, например, WHERE x = N'foo'

Пример: только Nпрефикс + nvarchar сохраняет ОК

DECLARE @test TABLE (Broken varchar(10), Working nvarchar(10))
INSERT @test VALUES (N'Value 化化', N'Value 化化')
INSERT @test VALUES ('Value ける', 'Value ける')

SELECT * FROM @test

Глобальных магических настроек тоже нет ...

Редактировать:

Я бы также запустил SQL-профилировщик, чтобы проверить,отправка символов
Теперь я подозреваю, что вы ломаете вещи до того, как они попадут в базу данных.

Принимая западноевропейские (DE + FR + Nordics), это работает нормально, без моих предложений выше

DECLARE @test TABLE (NowWorking varchar(10), Working nvarchar(10))
INSERT @test VALUES (N'öéäàüè', N'öéäàüè')
INSERT @test VALUES ('öéäàüè', 'öéäàüè')

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