mysql 数据类型
电脑的一个字节等于8位,也就是1Byte=8bit。
字节(Byte /bait/ n. [C])是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。
bit中文名称是位,音译“比特”,是用以描述电脑数据量的最小单位。
计算机容量单位的换算关系是:
1Byte=8bit 1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB 1PB=1024TB 1EB=1024PB 1ZB=1024EB 1YB=1024ZB
字符与字节
字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。
UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节。
Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节。
列类型详解
数值型
整型
类型 |
大小 |
范围(有符号) |
范围(无符号) |
用途 |
TINYINT |
1 字节 |
(-128,127) |
(0,255) |
小整数值 |
SMALLINT |
2 字节 |
(-32 768,32 767) |
(0,65 535) |
大整数值 |
MEDIUMINT |
3 字节 |
(-8 388 608,8 388 607) |
(0,16 777 215) |
大整数值 |
INT或INTEGER |
4 字节 |
(-2 147 483 648,2 147 483 647) |
(0,4 294 967 295) |
大整数值 |
BIGINT |
8 字节 |
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807) |
(0,18 446 744 073 709 551 615) |
极大整数值 |
整型的符号
在mysql中数字数据类型是有符号和无符号两种,当然整型也是,
在定义一个字段的时候可以这么使用
age tinyint unsigned,
unsigned代表是无符号,即都是大与等于0 的数
如果这样使用是默认有符号的
age tinyint ,
整型的数据宽度(即数据类型后的数字)和零填充
a. 数据宽度和数据类型的取值范围是无关的
b. 数据宽度只是指明MYSQL最大可能显示的数字个数,数值的位数小于M时会有空格填充;大于M时,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能显示出来
c. 数据宽度的效果需要配合zerofill使用
例如: numbers int(4) 、 number int(10) 和 numbers int (10) zerofill;
numbers int (4):
numbers int(10):
numbers int(10)zerofill:
小数型
类型 |
大小 |
范围(有符号) |
范围(无符号) |
用途 |
FLOAT |
4 字节 |
(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) |
0,(1.175 494 351 E-38,3.402 823 466 E+38) |
单精度 |
DOUBLE |
8 字节 |
(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) |
双精度 |
DECIMAL |
对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 |
依赖于M和D的值 |
依赖于M和D的值 |
定点小数值 |
浮点型的特点是小数点浮动,有精度丢失;定点型特点就是小数点固定,不会丢失精度。
单精度型能精确到七位,而双精度能精确到15位。用户在选用这些数据类型时,要注意变量所取值的范围。
记住以下几点: 1、浮点数存在误差问题; 2、对货币等对精度敏感的数据,应该用定点数表示或存储;
例如:
float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;
但是decimal型会出现警告:
MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。
例如:建立 f float(5,2) d double(5,2)e decimal (5,2)
当输入数据为 (1.23 1.23 1.23)时:
当输入数据为(1.234 1.234 1.23)时
当输入数据为 (1.234 1.234 1.234)时: decimal会报错 但是也可以输入
当把字段类型去掉精度和标度时:
当输入(1.234 1.234 1.234)时:第四行 decimal默认的为(10,0);
字符型
类型 |
大小 |
用途 |
CHAR |
0-255字符 |
定长字符串 |
VARCHAR |
0-65535 字符 |
变长字符串 |
TINYBLOB |
0-255字符 |
不超过 255 个字符的二进制字符串 |
TINYTEXT |
0-255字符 |
短文本字符串 |
BLOB |
0-65 535字符 |
二进制形式的长文本数据 |
TEXT |
0-65 535字符 |
长文本数据 |
MEDIUMBLOB |
0-16 777 215字符 |
二进制形式的中等长度文本数据 |
MEDIUMTEXT |
0-16 777 215字符 |
中等长度文本数据 |
LONGBLOB |
0-4 294 967 295字符 |
二进制形式的极大文本数据 |
LONGTEXT |
0-4 294 967 295字符 |
极大文本数据 |
定长char与变长varchar的区别:
char定义的是固定长度,长度范围为0-255,存储时,如果字符数没有达到定义的位数,会在后面用空格补全存入数据库中,数据库取char的数据时,会把后面的空格全部丢弃掉。
varchar是变长长度,长度范围为0-65535,存储时,如果字符没有达到定义的位数,也不会在后面补空格,当然还有一或两个字节来描述该字节长度,而数据库在取varchar数据时,尾部空格会保留。
char (16)长度固定, 如'www.uphtm.com' 存储需要空间 14个字符 实际占位16个字符 ,超过16个字符,会被截断
varchar(16) 可变长 如'www.uphtm.com' 需要存储空间 15字符, 实际占位15个字符,超过16个字符,会被截断
建议:
myisam 存储引擎 建议使用固定长度,数据列代替可变长度的数据列。
memory存储引擎 目前都使用固定数据行存储,因此无论使用char varchar列都没关系,
innodb 存储引擎 建意使用varchar 类型。
注意:char与varchar后面接的数据大小为存储的字符数,而不是字节数
类型 |
大小 |
范围 |
格式 |
用途 |
DATE |
3 |
1000-01-01/9999-12-31 |
YYYY-MM-DD |
日期值 |
TIME |
3 |
'-838:59:59'/'838:59:59' |
HH:MM:SS |
时间值或持续时间 |
YEAR |
1 |
1901/2155 |
YYYY |
年份值 |
DATETIME |
8 |
1000-01-01 00:00:00/9999-12-31 23:59:59 |
YYYY-MM-DD HH:MM:SS |
混合日期和时间值 |
TIMESTAMP |
4 |
1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 |
YYYYMMDD HHMMSS |
混合日期和时间值,时间戳 |
int |
|
|
|