項目的解決方案中引用的有mysqlsugar的數據庫操作庫,在使用插入數據過程中一些特殊的生僻字或表情符號總會提示:
Incorrect string value: '\xF0\x9F...' for column 'name' at row 1
這是由於UTF-8編碼有可能是兩個、三個、四個字節。Emoji表情或者某些特殊字符是4個字節,而MySQL的utf8編碼最多3個字節,所以數據插不進去。
進而提示\x十六進制的字符串信息。
因為myselsugar ,也是對sqlsugar的進一步封裝。所以將目光聚焦在sqlsugar上就可以了。
sqlsugar給的解決方案是:
在定義實體時將臨時保存特殊字符的變量mapping(映射)sqlsugar中的[SqlSugar.SugarColumn(IsTranscoding =
true
)]
//設置該自段轉碼 屬性
例:

1 using System; 2 using System.Linq; 3 using SqlSugar; 4 5 namespace ClearMonitor.Model.Entities 6 { 7 [SqlSugar.SugarTable("departmentintro")] 8 public class DepartmentintroData 9 { 10 public int DepartmentId { get; set; } 11 public string DepartmentNo { get; set; } 12 public string DepartmentName { get; set; } 13 /// <summary> 14 /// 部門簡介 15 /// </summary> 16 [SqlSugar.SugarColumn(IsTranscoding =true)] 17 public string DepartmentBlurb { get; set; } 18 19 } 20 }
最后是官方論壇的解決方案,也貼在下面了。MySql插入表情方案,感謝支持。如有問題請及時溝通聯系。
補充說明:實體特性API
ColumnName | 定義數據庫表字段的真實名稱,當一樣的時候可以不定義該特性 |
IsIgnore | 不作數據庫操作,true將不會進行查詢、添加等操作 |
IsPrimaryKey | 標識是否為主鍵,更新的時候會根據主鍵值判段更新哪條,當InitKey為Attribute時一定要加該特性不然找不到主鍵 |
IsIdentity | 是否為自增長 |
ColumnDescription | 列描述 |
Length | 長度,生成表會用到 |
IsNullable | 是否可空,生成表會用到 |
OldColumnName | 修改列名,生成表會用到 |
ColumnDataType | 自定義生成的數據類型,生成表會用到 |