MySQL C#文本编码问题

Pet*_*ter 15 c# mysql unicode utf-8

我有一个旧的MySQL数据库,编码设置为UTF-8.我正在使用Ado.Net Entity框架连接到它.

当ë喜欢字符时,我从中检索的字符串有奇怪的字符.

例如:"ë"是"Ã".

我想我可以通过从UTF8转换为UTF16来实现这一目标.

 return Encoding.Unicode.GetString(                
            Encoding.Convert(
            Encoding.UTF8,
            Encoding.Unicode,
            Encoding.UTF8.GetBytes(utf8)));
    }
Run Code Online (Sandbox Code Playgroud)

然而,这并没有改变一件事.

我怎样才能以正确的形式从这个数据库中获取数据?

bri*_*ler 35

在ADO.NET实体框架工作中(或通常使用MySQL .NET连接器),您需要做两件事来支持UTF-8:

  1. 确保表数据库的排序规则是UTF-8排序规则(即utf8_general_ci或其关系之一)
  2. 添加Charset=utf8;到您的连接字符串.

    "Server=localhost;Database=test;Uid=test;Pwd=test;Charset=utf8;"
    
    Run Code Online (Sandbox Code Playgroud)

我不确定,但编码可能区分大小写; 我发现那CharSet=UTF8;对我不起作用.


Rob*_*obV 3

即使数据库设置为 UTF8,您也必须执行以下操作才能使 Unicode 字段正常工作:

  1. 确保您使用的是 Unicode 字段类型,例如NVARCHARTEXT CHARSET utf8
  2. 每当您在字段中插入任​​何内容时,都必须使用 N 字符作为前缀以指示 Unicode 数据,如下例所示
  3. 每当您基于 Unicode 数据进行选择时,请确保再次使用 N 前缀

MySqlCommand cmd = new MySqlCommand("INSERT INTO EXAMPLE (someField) VALUES (N'Unicode Data')");

MySqlCommand cmd2 = new MySqlCommand("SELECT * FROM EXAMPLE WHERE someField=N'Unicode Data'");
Run Code Online (Sandbox Code Playgroud)

如果数据库配置不正确或插入数据时未使用 N 前缀,则无法获取正确的数据,因为它将被向下转换为 Latin 1/ASCII 字符集