mysql:创建表时声明数值型、字符串、时间

语法

CREATE TABLE Persons
(
PersonID tinyint(5) zerofill,
PersonID int unsigned,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

数值型

数值型分为整型,浮点型,定型

整型:

name 占位(字节) 最大值(无符号)
bigint 8 太大了
int 4 4294967295
mediumint 3 16777215
smallint 2 65535
tinyint 1 255

注意:默认是有符号的,也就是最小值是负数
一些可选参数:

  • unsigned 无符号(全是正数)
  • zerofill 填充至多宽,适合用于学号、编码等固定数字的,可以用 0 填充至固定宽度。默认带 unsigned,前面的例如 int(5) 代表填充长度为5

浮点型:

name 解释
float(M,D) M:精度,总位数
D:标度,小数点后位数
double(M,D) 比 float 范围更大

定点型:
decimal

浮点型与定点型的区别:
浮点型有精度损失,定点型更精确
比如:

creat table t4 (
a float(9,2),
b decimal(9,2)
)
insert into t4(1234567.23, 1234567.23)

得到的结果是:
a:1234567.25
b:1234567.23
所以定点型更精确,因为定点型小数点前后是用不同的数字存储的,而 float 就比较复杂,专门有协会定的规则。

字符串

char,varchar,text,blob,enum

name 意思 宽度 实际存字符(i<M) 实际占空间 利用率
char(M) 定长 M i M i/M <=100%
varchar(M) 变长 M i i字符 + (1-2)字节 i/(i+1-2) <100%

注释:
char(M) 不足 M个字符给字符右侧加空格,取出时删掉空格,这就意味着,如果存的数据右侧本身有空格,则取出会丢失,varchar 则不会
varchar(M) 第一个字符会有专门的字符长度说明
举例:
char(10),最多存 10 个字符,如果存一个字符,还是占了 10 个字符的空间,但是尽量用 char,寻址快,varchar 比较麻烦

text 一般存大段文本,还有更大的 mediumtext

blob 二进制,其实也是大段文本,但是不会因为字符集过滤掉而丢失信息,比如:一张图片有 0xFF 个字节,在 ASCII 字符集认为非法,会被过滤掉

enum 枚举

create table t3 (
gender enum ('男', '女')
);

set 集合,和枚举差不多,可以选其中的多个

时间型

year 年:95/1995
date 日期:1998-12-27
time 时间:13:56:23
datetime日期时间:1998-12-27 13:56:23
timestamp 时间戳:1970-1-1 0:0:0 到当前时间的秒数,一般存注册时间、发布时间都用这个,容易计算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章