Code First 问题,使用西里尔文播种数据
Code First issue with seeding data in Cyrillic
我正在使用种子方法填充数据库。
一些对象具有西里尔字母的属性。示例:
context.Wines.AddOrUpdate(new Wine()
{
Id = 1,
Name = "Шардоне",
etc........................................
对象已在数据库中正确创建,但是当我在 MS SQL management studio 中检查数据库时,葡萄酒的名称不是“Шардоне”,而是显示为“Øàðäîíå”。
奇怪的是,当我在 Startup class 中创建 wine 时是这样的:
var db = new WineSystemDbContext();
var ShardoneWine = new Wine { Name = "Шардоне};
db.Wines.Add(ShardoneWine);
数据库中的一切都以西里尔字母正确显示。
您知道这可能是什么原因造成的吗?
为了存储例如西里尔个字符,必须是nvarchar(x)
至少根据我的经验。
我看到了同样的现象:varchar(100)
数据正常,但输出 ???
- 但 nvarchar(100)
一切似乎都很好。
您可以在 connection string 中指定连接的字符集。只需将此部分添加到您的连接:
charset=UTF8;
如果没有结果,您可以尝试更改 char-set 的 Configuration.cs 文件。有两种方法可以做到这一点。
- 在 Visual Studio 编辑器中关闭 Configuration.cs,然后在解决方案资源管理器中关闭该文件 right-click,然后 select "Open With..." -> "CSharp Editor with Encoding" 和从列表中选择 "Unicode (UTF-8 with signature) - Codepage 65001" 选项(如果此代码页会显示一些 'Chinese' 符号,请尝试其他代码页)。现在修复您的西里尔文章节并保存 Configuration.cs 文件。
- Select "File" -> "Advanced Save Options" 并使用UTF-8编码播种数据的方法保存文件。
如果您使用 ntext 列类型,您也可能会遇到问题。
在您的查询中需要添加 de N (告诉 SQL 服务器它是 unicode),示例:
SELECT * FROM Wines WHERE someColumn = N'sometext'
我找到了解决办法!
这是我做的(在另一个主题中找到的)
在解决方案资源管理器中打开您的 Configuration.cs 文件,复制种子方法并将代码粘贴到 Windows 记事本中(暂时)。
"Next close Configuration.cs in Visual Studio if you have it opened, then right-click on that file in Solution Explorer and select "打开方式..." -> "CSharp Editor with Encoding" 并从列表中选择 "Unicode (UTF-8 with signature) - Codepage 65001" 选项(尝试不同的选项,当这个选项会显示一些 'chinese'个字符)。
将 Seed 方法替换为记事本中的方法。保存,从数据库中删除现有数据和 Update-Databse。您的国家/地区字符现在应该可以正确显示。
干杯。
感谢大家的帮助
我得到以下帮助:
Select "File" -> "Advanced Save Options" 并使用使用 UNICODE(带签名的 UTF-8)编码和行尾 - 当前设置播种数据的方法保存文件。
我正在使用种子方法填充数据库。 一些对象具有西里尔字母的属性。示例:
context.Wines.AddOrUpdate(new Wine()
{
Id = 1,
Name = "Шардоне",
etc........................................
对象已在数据库中正确创建,但是当我在 MS SQL management studio 中检查数据库时,葡萄酒的名称不是“Шардоне”,而是显示为“Øàðäîíå”。
奇怪的是,当我在 Startup class 中创建 wine 时是这样的:
var db = new WineSystemDbContext();
var ShardoneWine = new Wine { Name = "Шардоне};
db.Wines.Add(ShardoneWine);
数据库中的一切都以西里尔字母正确显示。
您知道这可能是什么原因造成的吗?
为了存储例如西里尔个字符,必须是nvarchar(x)
至少根据我的经验。
我看到了同样的现象:varchar(100)
数据正常,但输出 ???
- 但 nvarchar(100)
一切似乎都很好。
您可以在 connection string 中指定连接的字符集。只需将此部分添加到您的连接:
charset=UTF8;
如果没有结果,您可以尝试更改 char-set 的 Configuration.cs 文件。有两种方法可以做到这一点。
- 在 Visual Studio 编辑器中关闭 Configuration.cs,然后在解决方案资源管理器中关闭该文件 right-click,然后 select "Open With..." -> "CSharp Editor with Encoding" 和从列表中选择 "Unicode (UTF-8 with signature) - Codepage 65001" 选项(如果此代码页会显示一些 'Chinese' 符号,请尝试其他代码页)。现在修复您的西里尔文章节并保存 Configuration.cs 文件。
- Select "File" -> "Advanced Save Options" 并使用UTF-8编码播种数据的方法保存文件。
如果您使用 ntext 列类型,您也可能会遇到问题。
在您的查询中需要添加 de N (告诉 SQL 服务器它是 unicode),示例:
SELECT * FROM Wines WHERE someColumn = N'sometext'
我找到了解决办法!
这是我做的(在另一个主题中找到的)
在解决方案资源管理器中打开您的 Configuration.cs 文件,复制种子方法并将代码粘贴到 Windows 记事本中(暂时)。
"Next close Configuration.cs in Visual Studio if you have it opened, then right-click on that file in Solution Explorer and select "打开方式..." -> "CSharp Editor with Encoding" 并从列表中选择 "Unicode (UTF-8 with signature) - Codepage 65001" 选项(尝试不同的选项,当这个选项会显示一些 'chinese'个字符)。
将 Seed 方法替换为记事本中的方法。保存,从数据库中删除现有数据和 Update-Databse。您的国家/地区字符现在应该可以正确显示。
干杯。
感谢大家的帮助
我得到以下帮助: Select "File" -> "Advanced Save Options" 并使用使用 UNICODE(带签名的 UTF-8)编码和行尾 - 当前设置播种数据的方法保存文件。