UFT-8浅析 与 MySql5.6 插入数据报错 Incorrect string value: '\xF0\xB3\xA4\xB6....'

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码。

  • Unicode定义了所有可以用来表示字符的数值集合
  • UTF-8等UTF标准定义了这些数值和字符的映射关系

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则:

  • 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
  • 对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码,多出的位补0。

Unicode/UCS-4

bit数

UTF-8

Byte数

备注

0000 ~

007F

0~7

0XXX XXXX

1

 

0080 ~

07FF

8~11

110X XXXX

10XX XXXX

2

 

0800 ~

FFFF

12~16

1110XXXX

10XX XXXX

10XX XXXX

3

基本定义范围:0~FFFF

1 0000 ~

1F FFFF

17~21

1111 0XXX

10XX XXXX

10XX XXXX

10XX XXXX

4

Unicode6.1定义范围:0~10 FFFF

而我们的汉字一般占用三字节长度。

反观MySQL5.6的默认UTF-8编码

UFT-8浅析 与 MySql5.6 插入数据报错 Incorrect string value: '\xF0\xB3\xA4\xB6....'_第1张图片

我们有两种UTF-8格式可以选,一个是utf8 一个是utf8mb4

针对mysql的utf-8只有三字节

针对mysql的后来增加的utf8mb4才是真正的四字节utf8

反观报错信息: Incorrect string value: '\xF0\xB3\xA4\xB6....'

\xF0: 关键就是这个F 他表示1111,因此对应的是UTF-8 四字节编码格式。

所以如果你插入某个字段报错,将这个字段的编码改成utf8mb4就可以了。

你可能感兴趣的:(java,报错总结,开发点滴)