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-операциями.
Записи пытался создавать различными способами:
-
Создаю запись запросом в SQL Server Management Studio:
insert into Articles values (1, ‘текст’, ‘еще много текста’)
В БД колонки text и summary отображаются вопросительными знаками
-
Создаю запись запросом:
insert into Articles values (1, N'текст’, N'еще много текста’)
В БД колонки text и summary отображаются нормально
-
Создаю запись 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 эти типы данных будут удалены.