Jag misstänker vad som händer här är helt enkelt:din databas har icke-unicode-kolumner, och du försöker lagra unicode-data. Orepresenterbara karaktärer kommer verkligen att vara grekiska. Den korrekta fixen finns:se till att din kolumn är unicode. Att bråka med kolumnkodningar kunde jobb, men fan det är mycket jobb jämfört med att bara använda unicode.
Dapper skickar saker "som de är" till ADO.NET; vad leverantören gör är upp till leverantören. Det finns ett sätt att tala om för den att välja mellan ANSI och Unicode när data skickas till databasen, dock - via DbString
, dvs.
conn.Execute(sql, new {
id, name,
desc = new DbString { IsAnsi = true, Value = desc }
});
Detta låter dig också kontrollera längden etc. Vi kontrollerar dock inte kodningen här; kodningen är vanligtvis en egenskap hos själva databasen eller hos leverantören. Om MySQL har några skräddarsydda sätt att kontrollera det i ADO.NET, är jag "alla öron", men först:du måste få det att fungera i rå ADO.NET.