FreeSql icon indicating copy to clipboard operation
FreeSql copied to clipboard

freesql打印sql语句是:INSERT INTO `articulo`(`ID`, `CN`) VALUES('1', 'Ь×Ó'),为什么执行就变成1 D?¡Á¨?

Open ZevFung opened this issue 3 years ago • 4 comments

问题描述及重现步骤:

Ь×Ó 来自

var s = "鞋子";
byte[] bytesStr1 = Encoding.GetEncoding("gb2312").GetBytes(s);
var ss = Encoding.GetEncoding("latin1").GetString(bytesStr1);  //Ь×Ó
fsql.Aop.AuditValue += (s, e) =>
                {
                    if (e.Property.PropertyType == typeof(string) && e.Value != null && !string.IsNullOrWhiteSpace(e.Value.ToString()))
                    {
                        byte[] bytesStr1 = Encoding.GetEncoding("gb2312").GetBytes(e.Value.ToString());
                        e.Value = Encoding.GetEncoding("latin1").GetString(bytesStr1);
                    }
                };

var aa = _articuloRepository.Orm.Insert(entity).ToSql();
var ss = await _articuloRepository.Orm.Insert(entity).ExecuteAffrowsAsync();
或者
await _articuloRepository.InsertAsync(entity);

freesql打印sql语句是:INSERT INTO articulo(ID, CN) VALUES('1', 'Ь×Ó'),为什么执行就变成1 D?¡Á¨?

用下面的执行

var ss = await _articuloRepository.Orm.Ado.ExecuteNonQueryAsync(@"INSERT INTO `articulo`(`ID`, `CN`) VALUES('1', 'Ь×Ó')");

但这样执行正常插入INSERT INTO articulo(ID, CN) VALUES('1', 'Ь×Ó')

数据库的具体版本

mysql 5.6.31 数据库编码latin1

安装的包

3.2.666-preview20220829

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

.net core 3.1

ZevFung avatar Sep 09 '22 03:09 ZevFung

关于编码,需要检查数据库,数据库表,连接字符串。

2881099 avatar Sep 09 '22 04:09 2881099

关于编码,需要检查数据库,数据库表,连接字符串。

var ss = await _articuloRepository.Orm.Ado.ExecuteNonQueryAsync(@"INSERT INTO articulo(ID, CN) VALUES('1', 'Ь×Ó')");也正常执行,为啥var ss = await _articuloRepository.Orm.Insert(entity).ExecuteAffrowsAsync(); 或者 await _articuloRepository.InsertAsync(entity);就不正常执行?

ZevFung avatar Sep 09 '22 04:09 ZevFung

需要先检查传递进来的 entity 属性值是不是就已经乱码了。

hd2y avatar Sep 09 '22 06:09 hd2y

原因是仓储执行了两次 Aop.AuditValue,前几天已经处理了。

2881099 avatar Sep 16 '22 02:09 2881099