mysql 编码问题

Cause: java.sql.SQLException: Incorrect string value: '\xF0\xA1\x90\x93\xE6\x9D...' for column 'content' at row 141
; uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\xA1\x90\x93\xE6\x9D...' for column 'content' at row 141; nested exception is java.sql.SQLException:

 

 

mysql  默认字段编码 utf8,不支持表情字符,特殊字符和少量汉字,如果出现上面的 Incorrect string value: XXXX for column  XXXX 就是这种问题。

 

改成utf8mb4就可以支持

 

 

 

 

实测 𡐓 子不支持,手机常见输入法的表情不支持。

 

 

 

 

 

微信里面的显示:

 

 

 

utf8 动态长短,可以用用1-6个字节表示一个字符(不同时期标准不一样), mysql 默认的utf8 类型最多只有3个字节,mysql  5.5.3 以后加入类型 utf8mb4 最多可以有4 个字节,支持了一些表情,和一些生僻字 ,mb4即 most bytes 4

 

集合类型:

  utf8mb4_unicode_ci 使用了 unicode 排序,特殊字符当做独立的排序元素

  utf8mb4_general_ci  速度更加快,但是部分特殊字符 会单做普通字符处理,所以在有特殊字符的地方,排序结果和utf8mb4_unicode_ci 不同。

 

总结编码方式用 tf8mb4 更好,用户很多时候会输入表情。排序方式都行区别不大,关心特殊字符顺序的用 unicode方式

 

posted on 2021-07-16 11:05  zhangyukun  阅读(261)  评论(0编辑  收藏  举报

导航