MySQL、C#和C之间的字符编码#
我有一个数据库,内容如下MySQL、C#和C之间的字符编码#,c#,mysql,encoding,iso-8859-1,C#,Mysql,Encoding,Iso 8859 1,我有一个数据库,内容如下 https://pastebin.com/LRgTqHjN (以错误的编码存储) 将其保存到文件record.sql mysql -u root --password=root enctest < record.sql 但如果你加上 mysqldump -u root --password=root --default-character-set=latin1 enctest 它显示了正确的内容 我想在C#中重现后一种行为,我使用以下代码
https://pastebin.com/LRgTqHjN
(以错误的编码存储)
将其保存到文件record.sql
mysql -u root --password=root enctest < record.sql
但如果你加上
mysqldump -u root --password=root --default-character-set=latin1 enctest
它显示了正确的内容
我想在C#中重现后一种行为,我使用以下代码:
"MySqlConnection": "server=localhost;port=3306;database=enctest;user=root;password=root",
及
如何使其显示与第二个mysqldump相同的输出
注意:实际表的大小只有几TB;我不能只是转储它然后重新导入(这将解决问题),这就是为什么我需要在C#reader中修复它
更新:对于查看,有效的解决方案是将select查询更改为:
转换(使用utf8mb4转换二进制(使用拉丁语1转换({column}
)
每个字符串类型的列,这显然不是理想的,但它工作得很好。因此,请查找其他错误配置。因为这些UTF8字节仍然是UTF8字节。这与C#中的任何问题无关。发布你的代码和问题的真实再现。我所有的数据库都正确地将UTF8存储为UTF8,它在我的控制台中运行良好,没有添加任何内容。只是这个数据库的行为不同。phpmyadmin显示了与此数据库相同的问题。
msg
已经是一个字符串。它不需要任何编码转换;这是直接的复制/粘贴。不完全是这样,因为这与.NET无关。您必须发布最终将损坏的文本存储在MySQL数据库中的步骤——使用相同的编码创建表,插入文本,使其以相同的方式损坏。这意味着您应该在问题中包括MySQL转储,而不是C代码。您必须进行MySqlConnection
才能进行转换。如果你在之后尝试这样做,你将尝试反转两个转换*。也许您可以添加;字符集=utf8
或;连接字符串中的charset=latin1
<代码>utf8mb4也可用
"MySqlConnection": "server=localhost;port=3306;database=enctest;user=root;password=root",
MySqlCommand cmd = new MySqlCommand($"select * from siteTxt", conn);
using (MySqlDataReader reader = (MySqlDataReader)(await cmd.ExecuteReaderAsync()))
{
for (int i=0;i<6;i++)
{
row.Add(reader.GetString(i));
}
}
mysqldump -u root --password=root enctest