sospetto quello che sta succedendo qui è semplicemente:il tuo database ha colonne non Unicode e stai cercando di memorizzare dati Unicode. I caratteri non rappresentabili saranno infatti grecati. La soluzione corretta c'è:assicurati che la tua colonna sia unicode. Fare pasticci con le codifiche delle colonne potrebbe lavoro, ma dannazione è un sacco di lavoro rispetto al semplice utilizzo di Unicode.
Dapper passa le cose "così come sono" ad ADO.NET; quello che fa il provider dipende dal provider. C'è c'è un modo per dirgli di scegliere tra ANSI e Unicode durante l'invio di dati in il database, però - tramite DbString
, cioè
conn.Execute(sql, new {
id, name,
desc = new DbString { IsAnsi = true, Value = desc }
});
Ciò ti consente anche di controllare la lunghezza, ecc. Tuttavia, non stiamo controllando la codifica qui; la codifica è solitamente una proprietà del database stesso o del provider. Se MySQL ha alcuni modi su misura per controllarlo in ADO.NET, io sono "tutte le orecchie", ma prima:devi farlo funzionare in ADO.NET grezzo.