dotnetcore / FreeSql

🦄 .NET aot orm, C# orm, VB.NET orm, Mysql orm, Postgresql orm, SqlServer orm, Oracle orm, Sqlite orm, Firebird orm, 达梦 orm, 人大金仓 orm, 神通 orm, 翰高 orm, 南大通用 orm, 虚谷 orm, 国产 orm, Clickhouse orm, QuestDB orm, MsAccess orm.
http://freesql.net
MIT License
3.99k stars 842 forks source link

MySql 8.0.28 Emoji 字符 插入错误 #1789

Open aminnewgit opened 1 month ago

aminnewgit commented 1 month ago

问题描述及重现代码:

MySql 8.0.28 数据库编码是 utf8mb4 , navicat 可以正常插入Emoji 字符, 但是框架插入报错 error Incorrect string value: '\xF0\x9F\x8F\xA1' for column 'Title' at row 1 连接字符串中有添加 Charset=utf8mb4; 或 Charset=utf8 都没有效果

数据库版本

MySql 8.0.28

安装的Nuget包

freeSql 3.2.821

.net framework/. net core? 及具体版本

.net8

错误堆栈 FaGardenApi.Business.Content.Article.ArticleController error Incorrect string value: '\xF0\x9F\x8F\xA1</...' for column 'Content' at row 1 Incorrect string value: '\xF0\x9F\x8F\xA1</...' for column 'Content' at row 1 at FreeSql.Internal.CommonProvider.AdoProvider.LoggerException(IObjectPool1 pool, PrepareCommandResult pc, Exception ex, DateTime dt, StringBuilder logtxt, Boolean isThrowException) at FreeSql.Internal.CommonProvider.AdoProvider.ExecuteNonQueryAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, String cmdText, Int32 cmdTimeout, Func2 cmdAfterHandler, DbParameter[] cmdParms, CancellationToken cancellationToken) at FreeSql.Internal.CommonProvider.UpdateProvider1.<>c__DisplayClass68_0.<<RawExecuteAffrowsAsync>b__0>d.MoveNext() --- End of stack trace from previous location --- at FreeSql.Internal.CommonProvider.UpdateProvider1.ToSqlFetchAsync(Func2 fetchAsync) at FreeSql.Internal.CommonProvider.UpdateProvider1.RawExecuteAffrowsAsync(CancellationToken cancellationToken) at FreeSql.Internal.CommonProvider.UpdateProvider1.<>c__DisplayClass66_0.<<SplitExecuteAffrowsAsync>b__0>d.MoveNext() --- End of stack trace from previous location --- at FreeSql.Internal.CommonProvider.UpdateProvider1.SplitExecuteAsync(Int32 valuesLimit, Int32 parameterLimit, String traceName, Func1 executeAsync, CancellationToken cancellationToken) at FreeSql.Internal.CommonProvider.UpdateProvider1.SplitExecuteAffrowsAsync(Int32 valuesLimit, Int32 parameterLimit, CancellationToken cancellationToken) at FreeSql.DbSet`1.DbContextBatchUpdatePrivAsync(EntityState[] ups, Boolean isLiveUpdate, CancellationToken cancellationToken) at FreeSql.DbContext.<>c__DisplayClass62_0.<g__funcUpdate|3>d.MoveNext()

luoyunchong commented 1 month ago

https://github.com/dotnetcore/FreeSql/issues/526

修改数据库编码 修改数据表的编码为utf8mb4 修改连接串编码

aminnewgit commented 1 month ago

表 数据库 连接串 都改了还是报错

luoyunchong commented 4 weeks ago

卸载FreeSql.Provider.MySql,换 FreeSql.Provider.MySqlConnector 试试