C# Mysql UTF8 编码

Posted

技术标签:

【中文标题】C# Mysql UTF8 编码【英文标题】:C# Mysql UTF8 Encoding 【发布时间】:2012-07-26 05:02:46 【问题描述】:

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

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

我将连接字符串编辑成这样

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

但同样的问题。

【问题讨论】:

如果您找到解决方案,我会印象深刻 - 我尝试 UTF8 编码也没有成功,我最终不得不在添加到数据库之前通过 string.Replace("\xFFFD", ""); 删除这些字符,当某人的名字中有一个小写字母时,这显然会导致问题。 我考虑过的一件事是寻找 UTF8 的替代字符集 - 例如 UTF16 或 UTF8-swedish。 'Mojibake' 包含在***.com/questions/38363566/… 【参考方案1】:
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword; CharSet=utf8;

注意!使用小写值 utf8 而不是大写 UTF8,因为这会失败。

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

【讨论】:

这是向导生成的连接字符串 啊,好吧,查看我提供的链接,它包含所有 MySQL 连接字符串 我查了一下,当使用小的utf数据以正确的编码返回时,当它是UTF时没有数据返回 我搜索了2天的解决方案!简单是最好的,谢谢!【参考方案2】:

你可以试试:

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

【讨论】:

GetBytes->GetString 没有为我解决这个问题。【参考方案3】:

您可能需要为该列使用“utf8mb4”字符集以支持这样的 4 字节字符:“λ?”

utf8 字符集仅支持每个字符 1-3 个字节,因此不能支持所有 unicode 字符。

更多详情请见http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html

【讨论】:

غزةغزة 的 Mojibake,可以用 utf8 或 utf8mb4 表示。不过,通常最好为 utf8mb4 拍摄。【参考方案4】:

CHARSET 应为大写

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

【讨论】:

【参考方案5】:

以防万一以后有人来。

我需要使用带有 EF6 的 Mysql 创建一个 Seed 方法,以加载 SQL 文件。运行它后,我在数据库上得到了奇怪的字符,比如?替换é, ó, á

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

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

然后是 M.Shakeri 提醒:

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

希望对您有所帮助。

R.

【讨论】:

【参考方案6】:

我发现但没有机会真正浏览的一件事是这里提供的整理图表:http://www.collation-charts.org/mysql60/

这将向您显示哪些字符是给定 MySQL 排序规则的一部分,以便您可以为您的数据集选择最佳选项。

【讨论】:

这有点帮助它是 latin1_general_ci 这将如何有用? 如果您在 mySQL 中将排序规则设置为 latin1_general_ci,您应该能够在 C# 和 PHP 中从数据库中提取正确的数据 - 无论如何都值得一试【参考方案7】:

在连接字符串中设置字符集是指发送到服务器的查询的字符集。它不影响从服务器返回的结果

https://dev.mysql.com/doc/connectors/en/connector-net-connection-options.html

我发现从客户端指定字符集的一种方法是在打开连接后运行它。

set character_set_results='utf8';

【讨论】:

以上是关于C# Mysql UTF8 编码的主要内容,如果未能解决你的问题,请参考以下文章

MySQL C# 文本编码问题

C#将字符转换成utf8编码 GB321编码转换

c# 操作mysql数据库的时候会出现 插入中文汉字变成问号?

C#对字符串进行编码解码

MySQL设置默认编码集为utf8怎么设置

如何设置MySQL表的某字段编码为utf8?急!