如图所示 使用mysql.data 6.2.1.0查询到的数据 转码后就是正常的 而mysql.data高于这个版本查询到的数据转码后个别字符乱码
昨天折腾了一天都没解决 我知道UTF8好用 但是这是面向用户的东西 只能我兼容他们不能他们兼容我。。。。代码如下
private static async void Test()
{
string connStr = $"server=47.101.216.250;Database=master2;Uid=master2;Pwd=123456;Port=3306;Charset=utf8;Convert Zero Datetime=True;Allow Zero Datetime=True;";
var conn = new MySqlConnection(connStr);
conn.Open();
MySqlCommand cmd = new MySqlCommand { Connection = conn };
cmd.CommandText = "set names latin1; ";//设置编码 项目所需的编码
cmd.ExecuteNonQuery();
//很有意思的是设置编码为latin1后 mysql.data版本号为:6.2.1.0就可以正常使用 如果高于这个版本的mysql.data 取回的数据转码后个别字符是乱码的
//当然使用 convert(unhex(hex(convert(charac_name using latin1))) using utf8)as charac_name 也是可以解决的 但是项目需要用实体框架这个方案行不通
//实体框架要求mysql.data 版本号为:8.0.22所以低版本的mysql.data也不适用
//昨天搞了一天都没解决掉 特此来论坛求救各位 我想使用8.0.22版本的mysql.data同时也能解决个别字符乱码的问题
for (int i = 0; i < 10; i++)
{
cmd.CommandText = $"INSERT INTO char_data (charac_name) values('精易论坛{i}')";
cmd.ExecuteNonQuery();
}
cmd.CommandText = "SELECT * FROM char_data WHERE charac_name='精易论坛1'";
MySqlDataReader read = cmd.ExecuteReader();
read.Read();
var name = read[1].ToString();
Console.WriteLine("返回结果:" + Conver(name));
read.Close();
conn.Close();
}
public static string Conver(string str)
{
if (str == null || str.Length == 0)
{
return string.Empty;
}
return Encoding.UTF8.GetString(Encoding.GetEncoding("iso-8859-1").GetBytes(str));
}