Eg: int(11)
, decimal(5,2)
, varchar(32)
介绍:
Mysql数据库中以 数据类型(m)
来约束数据,其中 数字m在不同的数据类型中表示含义是不同的
整数类型
Mysql中整型数系统已经限制了取值范围
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2字节 | ( -2^15 :-32768,2^15 - 1:32767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4字节 | (-2^31:-2 147 483 648, 2^31 - 1:2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8字节 | (-2^63:-9 233 372 036 854 775 808,2^63-1:9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
这些类型,是定长的,其容量是不会随着后面的数字而变化的,那么后面的数字是用来干什么的呢?
- 显示宽度
不论是有符号还是无符号类型,他们都使用相同的存储空间,并具有相同的性能。但是对于显示工具来说(例如Mysql客户端),后面的数据长度决定了用来显示字符的个数
实数类型
实数是带有小数部分的数字。Mysql即支持精确类型,也支持不精确类型
Fixed-Point类型 (DECIMAL, NUMERIC)
DECIMAL
类型用于存储精确的小数且以二进制形式存储。在MYSQL5或者更高版本中,DECIMAL类型允许最多65个数字。
在创建MySQL的DECIMAL列的时候,可以指定进度和标度:DECIMAL(M,D)。M为精度(precision),表示该值的总长度;D为标度(scale),表示小数点后面的长度。例如,DECIMAL(7,4)可存储的数据范围为-999.9999~999.9999。
DECIMAL
在不指定精度时,默认整数为10,小数为0,即DECIMAL(10,0)。当DECIMAL(M,D)列存储的数值的小数位数超过D,则四舍五入到D位。当DECIMAL(M,D)列存储的数值大于该列能表示的范围,则存储为DECIMAL(M,D)能表示的最大值;当DECIMAL(M,D)列存储的数值小于该列能表示的范围,则存储为DECIMAL(M,D)能表示的最小值。
浮点类型(FLOAT、DOUBLE)
FLOAT
和 DOUBLE
类型代表近似值。MySQL使用4个字节表示单精度值、使用8个字节表示双精度值。单精度的FLOAT类型表示4个字节;24-53的精度则需要双精度DOUBLE类型表示
字符串类型
VARCHAR
VARCHAR
类型用于存储可变长字符串,其中M代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。它比定长类型更节省空间,因为它仅使用必要的空间(例如,越短的字符串使用越少的空间)。
VARCHAR
需要使用1 或 2个额外字节记录字符串的长度,如果列的长度小于或等于255,则只使用1个字节表示,否则使用2个字节。
VARCHAR
节省了存储空间,所以对性能有所帮助,但是,由于行是可变的,所以UPDATE的时候可能会使行变得比原来更长,这就导致需要做额外的工作。
VARCHAR
在存储字符串列的最大长度,比平均长度大很多; 列更新较少;复杂字符集;等情况下较为适合选择
CHAR
CHAR
类型是定长的,MYSQL会根据定义的长度为字符串分配足够的空间,当存储类型为CHAR
的时候,MYSQL 会删除末尾的空格,CHAR值会根据需要采用空格填充,来进行比较
CHAR
适合存储很短的字符串,或者所有值都接近同一个长度。如: 存储有MD5的密码字段,或者对于一些非常短的内容的列,如 Y,N,此时选择CHAR只需要一个字节,而VARCHAR却需要两个字节
字符串的长度定义不是字节数,是字符数。多字节字符集会需要更多的空间存储单个字符
BLOB、TEXT
BLOB
、TEXT
都是为存储很大的数据而设计的字符串类型,分别采用二进制和字符方式存储
MySql计算字段的长度
LENGTH
LENGTH
函数是一个用来获取字符串长度的内置函数
CHAR_LENGTH
CHAR_LENGTH
查看字符串长度
区别:
命令 | 单位 | 一个汉字 | 一个数字or字母 | 示例 |
---|---|---|---|---|
char_length |
字符 | 1 | 1 | char_length(str) |
length |
Byte | 3 | 1 | length(str) |
bit_length |
bit | 24 | 8 | length(str) |