MySQL C#文本编码问题

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

当我想要ë同样的字符时,我从中检索的字符串有奇怪的字符。

例如:“ë”是“Ô。

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

return Encoding.Unicode.GetString( Encoding.Convert( Encoding.UTF8, Encoding.Unicode, Encoding.UTF8.GetBytes(utf8))); } 

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

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

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

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

     "Server=localhost;Database=test;Uid=test;Pwd=test;Charset=utf8;" 

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

即使数据库设置为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'"); 

如果没有正确配置数据库或者在不使用N前缀的情况下插入数据,则无法获得正确的数据,因为它将被转发为Latin 1 / ASCII字符集

尝试通过“set names utf8”查询设置编码。 您也可以在mysql配置中设置此参数。

正如其他人所说,这可能是一个db问题,但它也可能是由于使用旧版本的.net mysql连接器引起的。

我真正想评论的是utf8到utf16的转换。 您尝试转换的字符串实际上是alicay unicode编码,因此您的“Ô字符实际上占用4个字节(或更多),并且在转换时不再是“ë”字符的错误表示。 这就是你的转换没有做任何事情的原因。 如果你想进行这样的转换,我认为你必须将你的utf8字符串编码为每个字符串1字节的旧样式,使用代码页,其中字节值Ã和«实际上代表ë的utf8字节序列然后将此新字符串的字节视为utf8字符串。 好玩的东西。

谢谢你的嘴巴,你的解决方案有效,但我们仍然需要转换角色。 我认为这是你的问题:)并且对于转换字符,你可以使用这个代码

  System.Text.Encoding utf_8 = System.Text.Encoding.UTF8; string s = "unicode"; //string to utf byte[] utf = System.Text.Encoding.UTF8.GetBytes(s); //utf to string string s2= System.Text.Encoding.UTF8.GetString(utf);