限制规则
一、字段限制规则
字段的限制在字段定义的时候有以下规则:
存储限制
varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535
编码长度限制
- 字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
- 字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
- 若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
行长度限制
导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示:
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。
二、整数范围
mysql的整数类型有:tinyint,smallint,mediumint,int,bigint。分别使用8、16、24、32、64位存储空间。
- 值的范围:-2(N-1)次幂 到 2(N-1)次幂-1 ,N是存储空间位数。
- 整数类型有可选的UNSIGNED属性,表示不允许负值,这大致可以使正数的上限提高一倍。例如tinyint.UNSIGNED可以存储的范围是0~255,但是tinyint的范围是-128~127。
- mysql可以为整数类型指定宽度,如int(11),它不会限制值的合法范围,只是规定了mysql的一些交互工具用来显示字符的个数。对于存储和计算来说int(1)和int(11)是相同的。
三、字符型范围
varchar需要使用1或者2字节记录字符串的长度,如果列的最大长度小于或等于255字节,则使用1,否则用2。 varchar(1)的列使用了2个字节的存储空间,而varchar(1000)使用的是1002个字节。