Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL、C#和C之间的字符编码#_C#_Mysql_Encoding_Iso 8859 1 - Fatal编程技术网

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