开发者社区> 问答> 正文

等价于MySQL中的varchar(max)??mysql

MySQL中的varchar(max)等价于什么?

展开
收起
保持可爱mmm 2020-05-17 11:25:51 406 0
1 条回答
写回答
取消 提交回答
  • varchar的最大长度取决于MySQL中的最大行大小,即64KB(不包括BLOB):

    VARCHAR(65535) 但是,请注意,如果使用多字节字符集,则限制会更低:

    VARCHAR(21844) CHARACTER SET utf8 这里有些例子:

    最大行大小为65535,但是varchar还包括一个或两个字节来编码给定字符串的长度。因此,即使它是表中的唯一列,您实际上也无法声明最大行大小的varchar。

    mysql> CREATE TABLE foo ( v VARCHAR(65534) ); ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs 但是,如果我们尝试减少长度,我们会找到最大的长度:

    mysql> CREATE TABLE foo ( v VARCHAR(65532) ); Query OK, 0 rows affected (0.01 sec) 现在,如果我们尝试在表级别使用多字节字符集,则会发现它会将每个字符都计为多个字节。UTF8字符串不一定每个字符串都使用多个字节,但是MySQL无法假定您将所有以后的插入都限制为单字节字符。

    mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8; ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead 尽管最后一个错误告诉我们,InnoDB仍然不喜欢21845的长度。

    mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8; ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs 如果您计算得出21845 * 3 = 65535,那还是行得通的。而21844 * 3 = 65532,就可以了。

    mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8; Query OK, 0 rows affected (0.32 sec)来源:stack overflow

    2020-05-17 11:31:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像