Eu suspeito o que está acontecendo aqui é simplesmente:seu banco de dados tem colunas não-unicode e você está tentando armazenar dados unicode. Personagens irrepresentáveis serão de fato gregos. A correção correta é:verifique se sua coluna é unicode. Mexer com codificações de coluna poderia funciona, mas droga isso é muito trabalho comparado ao uso de unicode.
Dapper passa as coisas "como estão" para o ADO.NET; o que o provedor faz depende do provedor. Existe há uma maneira de dizer para escolher entre ANSI e Unicode ao enviar dados para o banco de dados, porém - via
DbString
, ou seja conn.Execute(sql, new {
id, name,
desc = new DbString { IsAnsi = true, Value = desc }
});
Isso também permite que você controle o comprimento etc. No entanto, não estamos controlando a codificação aqui; a codificação geralmente é uma propriedade do próprio banco de dados ou do provedor. Se o MySQL tem algumas maneiras personalizadas de controlar isso no ADO.NET, sou "todo ouvidos", mas primeiro:você precisa fazê-lo funcionar no ADO.NET bruto.