C# MySQL UTF8编码

21

我有一个使用utf8_general_ci编码的mysql数据库,

我使用utf-8页面和文件编码连接同样的数据库使用php没有问题, 但是当我用C#连接mysql时,我得到像这样的字母 غزة

我编辑了连接字符串变成了这样

server=localhost;password=root;User Id=root;Persist Security Info=True;database=mydatabase;Character Set=utf8

但是问题仍然存在。


如果你找到了解决方案,我会感到印象深刻 - 我尝试了UTF8编码,但没有成功,最终不得不在添加到数据库之前剥离这些字符,通过执行string.Replace("\xFFFD", "");,这显然会在某人的名字中包含一个小写字母时引起问题。 - Robert H
我曾考虑过寻找替代UTF8的字符集,例如UTF16或UTF8-Swedish。 - Robert H
“乱码”问题在 https://dev59.com/WFoT5IYBdhLWcg3wnQn9 中有详细讨论。 - Rick James
8个回答

39
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword; CharSet=utf8;

注意!使用小写的 utf8 而不是大写的 UTF8,否则将会失败。

参见 http://www.connectionstrings.com/mysql


这是由向导生成的连接字符串。 - T4mer
啊,好的,请查看我提供的链接,里面有所有的MySQL连接字符串。 - x06265616e
我已经检查过了,当使用小的UTF数据时,返回的数据以正确的编码方式呈现,但当使用UTF时则没有数据返回。 - T4mer
我已经寻找解决方案两天了!简单就是最好的,谢谢! - Korenron
我已经搜索了一段时间,但没有结果...谢谢!!!(我的问题与一些带重音的字符有关) - Frijey Labs

5

您能尝试一下:

Server=localhost;Port=3306;Database=xxx;Uid=x xx;Pwd=xxxx;charset=utf8;"

编辑:我有一个新想法:

//To encode a string to UTF8 encoding
string source = "hello world";
byte [] UTF8encodes = UTF8Encoding.UTF8.GetBytes(source);

//get the string from UTF8 encoding
string plainText = UTF8Encoding.UTF8.GetString(UTF8encodes);

祝你好运

关于这种技术的更多信息,请访问http://social.msdn.microsoft.com/forums/en-us/csharpgeneral/thread/BF68DDD8-3D95-4478-B84A-6570A2E20AE5


1
使用 GetBytes->GetString 对于我来说在这个问题上没有任何作用。 - Bryan Legend

4

غزةغزة 的乱码表示,可以使用 utf8 或 utf8mb4 进行表示。不过,一般来说最好选择 utf8mb4。 - Rick James

1

CHARSET应该是大写字母

Server=localhost;Port=3306;Database=xxx;Uid=x xx;Pwd=xxxx;CHARSET=utf8;

1

以防之后有人来到这里。

我需要使用EF6和MySQL创建一个种子方法,以加载SQL文件。运行后,数据库中出现了奇怪的字符,如?代替了é、ó、á等字符。

解决方案: 确保我使用正确的字符集读取文件:在我的情况下是UTF8。

     var path = System.AppDomain.CurrentDomain.BaseDirectory;
     var sql = System.IO.File.ReadAllText(path + "../../Migrations/SeedData/scripts/sectores.sql", Encoding.UTF8);

然后,M.Shakeri提醒:

在web.config的cxn字符串中使用CHARSET=utf8。将CHARSET作为大写字母,utf8作为小写字母。

希望这有所帮助。

R.


0

这个对我有用:

"datasource=xxx;port=3306;username=xxx;password=xxx;database=xxx;charset=utf8mb4"

2
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0

我发现一件事,但还没有机会仔细浏览,那就是这里提供的排序图表:http://www.collation-charts.org/mysql60/

这将展示哪些字符属于给定的MySQL排序规则,以便您可以为您的数据集选择最佳选项。


这有点有帮助,它是latin1_general_ci,这对什么有用? - T4mer
如果你在mySQL中将排序规则(collation)设置为latin1_general_ci,那么你应该能够从C#和PHP中正确地获取数据库中的数据 - 无论如何都值得一试。 - Robert H

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接