MySQL 参数化查询 C# - 字符串值不正确:列'xF0'



我使用MySql.Data MySqlClient在C#中的MySql 8服务器上运行UPDATE查询。我正在使用一个patamerateized查询,并试图将一个非BMP(补充(unicode表情符号添加到我的表值中(这个问题也发生在一些汉字中(。

MySql.Data.MySqlClient.MySqlCommand query = _connection.CreateCommand();
query.CommandText = "UPDATE favorites SET fruit = @favFruit WHERE id = 1";                
MySql.Data.MySqlClient.MySqlParameter parameter = query.CreateParameter();
parameter.ParameterName = "favFruit";
parameter.Value = "🥑";
query.Parameters.Add(parameter);
query.ExecuteNonQuery();

我的查询Incorrect string value: 'xF0' for column 'fruit' at row 1失败

我花了一整天的时间寻找解决问题的办法。我试过:

  • CHARSET=utf8mb4;添加到mt连接字符串,这很重要,也是必需的
  • 确保我的数据库、表和列使用utf8mb4字符集和utf8mb4_0900_ai_ci排序规则,这很重要,也是必需的,因为utf8实际上是";Unicode的一部分";在MySQL中
  • 尝试调用SET NAMES utf8mb4,但没有执行任何操作,因为服务器排序规则都已正确设置为utf8mb4,如SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';所示-请参阅MySQL utf8mb 4,保存表情包时的错误
  • 将my.ini中所有推荐的默认值设置为web上推荐的值

但它仍然不起作用!我不知道还能做什么!

浪费了一整天,结果发现MySql.Data MySqlClient中默认的参数类型是Blob。在查询执行过程中转换此值时,会出现某些无法正确转换Unicode的情况。

添加parameter.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.VarString;修复了所有问题。

MySql.Data.MySqlClient.MySqlParameter parameter = query.CreateParameter();
parameter.MySqlDbType = MySql.Data.MySqlClient.MySqlDbType.VarString;
parameter.ParameterName = "favFruit";
parameter.Value = "🥑"

相关内容

最新更新