MySQL varchar(255) 限制和异常

use*_*158 5 mysql varchar mysql-5.5

我在 MySQL 数据库中定义了一个列:

ALTER TABLE `my_table` CHANGE `desc` `desc` VARCHAR( 255 ) 
    CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL
Run Code Online (Sandbox Code Playgroud)

但是,当我从前端输入超过 233 个字符的文本时,数据会被截断。

将列的大小更改为 varchar(511) 没有任何区别。

我使用 PHP 的strlen()函数计算了字符数,结果显示 233 个字符。

为什么 MySQL 会这样做,我该如何保存完整的字符串?

小智 -3

使用 255 是因为它是 8 位数字可以计算的最大字符数。它最大限度地利用了 8 位计数,而无需不必要地需要另一个整个字节来对 255 以上的字符进行计数。

以这种方式使用时,VarChar 仅使用字节数 + 1 来存储文本,因此您不妨将其设置为 255,除非您希望对字段中的字符数进行硬限制(例如 50)。