“TEXT”列中可以容纳多少个多字节字符?

时间:2017-04-25 19:10:57

标签: mysql

根据documentation(强调我的):

  

TEXT [(M)] [CHARACTER SET charset_name] [COLLATE collat​​ion_name]

     

TEXT列,最大长度为65,535(216 - 1)个字符。 如果值包含多字节字符,则有效最大长度会减少。每个TEXT值使用2字节长度前缀存储,该前缀表示值中的字节数。

TEXT列可以存储65535 字节会更准确吗? TEXT列中多字节字符的具体影响是什么?

这是我困惑的根源:

在MySQL 5中,CHARVARCHAR字段已更改,因此它们会计算字符而非字节(例如,您可以“你好,世界!“进入VARCHAR(6))。 TEXT字段是否得到相同的处理,还是仍然计算字节数?

1 个答案:

答案 0 :(得分:5)

我的知识:utf-8中的一个字符最大32位大(4字节)。

编辑:utf8在mysql中只有最大3字节大。 utf8mb4最大4字节。

所以最坏的情况只有最大的字符:

utf8: 65535 / 3 = 21845
utf8mb4: 65535 / 4 = 16383,75 =~ 16383

https://stackoverflow.com/a/9533324/2575671

编辑2:

我用10.1.21-MariaDB测试了本地。测试字符utf-8:

1-Byte:a

2-Byte:ö

3-Byte:好

4字节:

utf8: 21845 @3-Byte (好)
utf8mb4: 16386  @4-Byte ()

<强>截图:

local test

http://i.imgur.com/5dmRteL.png