MS SQL и русский текст в Unicode

В веб-приложении на ASP.NET WebAPI используется база данных MS SQL, генерируемая с использованием Entity Framework 6 Code First. Collation этой базы данных — unicode. Однако, если создавать записи в этой БД с кириллическими символами, используя методы WebAPI-контроллера, русский текст заменяется на вопросительные знаки.

База содержит таблицу Articles:

{ text: ntext, summary: nvarchar }

В приложении есть ASP.NET WebAPI-контроллер для работы с этой сущностью с автосгенерированными CRUD-операциями.

Записи пытался создавать различными способами:

  1. Создаю запись запросом в SQL Server Management Studio:
    ​insert into Articles values (1, 'текст', 'еще много текста')
    

    В БД колонки text и summary отображаются вопросительными знаками

  2. Создаю запись запросом:
    ​insert into Articles values (1, N'текст', N'еще много текста')
    

    В БД колонки text и summary отображаются нормально

  3. Создаю запись ajax-запросом из браузера:

    $.post("api/articles", {
      summary: "текст",
      text: "еще много текста"
    }).always(function(res) {
      console.log(res)
    });​
    

    В консоли отображается нормальное значение, но если посмотреть в БД или выполнить GET-запрос к этой записи — вернутся вопросительные знаки как в случае 1.
    Данные отправляются в Unicode.

Для решения этой задачи необходимо в методе OnModelCreating DbContext-а добавить явное указание, что в колонке хранится Unicode-значение:

modelBuilder
.Entity<article>() // Выбираем сущность...
.Property(c=> c.Text) // ... и свойство, которое будем настраивать
.HasColumnType("NTEXT") // Означим тип поля
.IsUnicode(true); // Укажем еще раз, что поле - Unicode.

PS: Если есть возможность, то не используйте тип данных ntext, text и image. В ближайшем версии MS SQL Server эти типы данных будут удалены.

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.