Код Первая проблема с сидированием данных на кириллице

Я использую метод seed для заполнения базы данных. Некоторые объекты имеют свойства на кириллице. Пример:

context.Wines.AddOrUpdate(new Wine()
       {
           Id = 1,
           Name = "Шардоне",
           etc........................................

Объекты правильно создаются в базе данных, однако, когда я проверяю базу данных в студии управления MS SQL, вместо имени вина «Шардоне» оно отображается как «Øàðäîíå».

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

var db = new WineSystemDbContext();
var ShardoneWine = new Wine { Name = "Шардоне};
db.Wines.Add(ShardoneWine);

в базе все правильно отображается на кириллице.

У вас есть идея, что может быть причиной этого?


person mega_n00b    schedule 05.01.2016    source источник
comment
Это может зависеть от того, какой тип данных вы используете. varchar или nvarchar   -  person McBooley    schedule 06.01.2016


Ответы (5)


Вы можете указать кодировку вашего подключения в строке подключения . Просто добавьте эту часть в ваше соединение:

charset=UTF8;

Если нет результатов, вы можете попробовать изменить набор символов в файле Configuration.cs. Есть два способа сделать это.

  1. Закройте Configuration.cs в редакторе Visual Studio, затем щелкните правой кнопкой мыши этот файл в обозревателе решений и выберите "Открыть с помощью..." -> "Редактор CSharp с кодировкой" и из списка выберите "Юникод (UTF-8 с подписью)". - Кодовая страница 65001" (попробуйте другую кодовую страницу, если эта покажет вам некоторые "китайские" символы). Теперь исправьте кириллические главы и сохраните файл Configuration.cs.
  2. Выберите «Файл» -> «Дополнительные параметры сохранения» и сохраните файл с помощью метода заполнения данных с кодировкой UTF-8.

У вас также могут возникнуть проблемы, если вы используете ntext тип столбца.

person Vadim Martynov    schedule 05.01.2016

Для хранения, например. Кириллические символы, они должны быть nvarchar(x) По крайней мере, исходя из моего опыта.

Наблюдал тот же феномен: с varchar(100) данные идут нормально, а выходят ???-, а с nvarchar(100) вроде все нормально.

person McBooley    schedule 05.01.2016

В ваш запрос нужно добавить de N (чтобы сообщить SQL Server, что это юникод), например:

SELECT * FROM Wines WHERE someColumn = N'sometext'
person Rodolfo    schedule 05.01.2016
comment
проблема не в SQL с селектом, проблема в Entity Framework. - person Claies; 06.01.2016

Я нашел решение!

Вот что я сделал (нашел в другой теме)

Откройте файл Configuration.cs в обозревателе решений, скопируйте метод Seed и вставьте код, например, в Блокнот Windows (временно).

«Далее закройте Configuration.cs в Visual Studio, если он у вас открыт, затем щелкните правой кнопкой мыши этот файл в обозревателе решений и выберите «Открыть с помощью…» -> «Редактор CSharp с кодировкой» и из списка выберите «Юникод ( UTF-8 с подписью) — вариант «Кодовая страница 65001» (попробуйте другой вариант, когда этот покажет вам некоторые «китайские» символы).

Замените метод Seed на метод из Блокнота. Сохранить, удалить существующие данные из базы данных и Update-Databse. Символы вашей страны теперь отображаются правильно.

Ваше здоровье."

Спасибо всем за помощь

person mega_n00b    schedule 06.01.2016

Мне помогло следующее: Выбираем "Файл" -> "Дополнительные параметры сохранения" и сохраняем файл методом, который заполняет данные кодировкой UNICODE (UTF-8 с подписью) и Окончания строк - Текущие настройки.

person Kuanysh Mussayev    schedule 18.04.2018