mysql常用数据类型

本人在此声明,本人现阶段只涉猎mysql和sqlserver故只比较这两种

整型

整型分类、难度
bit1bit 要么0要么1
TINYINT1字节(MySQL可正可负,SQL server 只有正数)
SMALLINT2字节
MEDUIMINT3字节(注意SQL server无此数据类型)
INT4字节
BIGINT8字节

就如tinyint的取值范围,因为是1字节=8bit位,故有符号数的取值范围是-128~127,无符号数的取值范围是0 ~255.
上面的整型,大家根据字节数可推算相应类型的取值范围。
若不要复数,可在类型后加上unsigned 如 id int unsigned 则在mysql中的取值范围从有符号的-2^15~
2^15-1
int(5) 5代表宽度 即不够7位数则补0 如设置int(5) zerofill 则输入123 显示00123,但是如果超出5位数,依旧可以正常显示,如123456,可以正常显示123456,所以在我看来加zerofill完全是为了显示工整并且如果不加zerofill的话, 设置宽度无效,且 zerofill默认无符号,故有 zerofill则可以不写unsigned

CREATE TABLE testsql1111(id0 int(3), id1 int(3) ZEROFILL,id2 int);
INSERT INTO testsql1111 VALUES(1,1,1)
SELECT * FROM testsql1111;
查看其长度
在这里插入图片描述

至于sqlserver
在建表验证过程中出现了以下问题,即SQL SERVER无法指定整型的列宽
在这里插入图片描述在这里插入图片描述

小数

(此为mysql)又可分为定点型和浮点型

分类字节数
浮点型字节数
float4字节
double8字节
定点型备注
decimal(M,D)decimal默认M,D为10,0

dec(M,D)取值范围小但精准,没有误差适合精度高的场景
浮点型 取值范围大但不精准,有误差适合不需要精度高的场景
因精度缺失,不推荐使用浮点型,另外浮点型因精度缺失在进行比较时不使用等号
D:小数点后有D位,少则补0,多的四舍五入
M:整数部位加小数部位为M位,超过范围则插入临
SQLSERVER 和mysql差不多但浮点型是float和real 定点小数是 decimal和numeric(numeric和decimal差不多)

日期型

此为mysql常用的有YEAR DATE TIME DATETIME TIMESTAMP

类型名称字节日期格式最小值最大值
YEAR1YWYY或YY19012155
TIME时间3HH:MM:SS-838:59:59838:59:59
DATE日期3YYYY-MM-DD1000-01-019999-12-03
DATETIME日期时间8YYYY-MM-DDHH:MM:SS1000-01-01 00:00:00
TIMESTAMP日期时间4YYYY-MM-DDHH:MM:SS1970-01-01 00:00:00 UTC

YEAR:2位字符串的YEAR已经不推荐使用,若写01-69 会自动转为2001-2069,若写70-99,会自动转为1970-1999,若添加整数0或00会转换为0000年,若用或日期类型或字符串会转换为2000年,YYYY超出范围报错。
DATE:和上面类似可写为YY-MM-DD,YY和上面一样 在crud时可写为(‘YYYY-MM-DD’),(YYYYMMDD)(‘YYYYMMDD’)(YYMMDD)(‘YY-MM-DD’)后面这几种会做隐式转换
获取当前DATATIME类型日期mysql可以用CURRENT_DATE()或NOW()或CURRENT(),sqlserver 使用GETDATE()
TIME:即时分秒,(1)可以使用带有冒号的字符串,比如’D HH:MM:SS’、‘HH:MM:SS’、‘HH:MM’、‘D HH:MM’, ‘D HH’ 或 ‘SS’ 格式,都能被正确地插入TIME类型的字段中。其中D表示天,其最小值为0,最大值为34。如果使用带有D格式的字符串插入TIME类型的字段时,D会被转化为小时,计算格式为D*24+HH。当使用带有冒号并且不带D的字符串表示时间时,表示当天的时间,比如12:10表示12:10:00,而不是00:12:10。
(2)可以使用不带有冒号的字符串或者数字,格式为 ‘HHMMSS’ 或者 HHMMSS。如果插入一个不合法的字符串或者数字,MySQL在存储数据时,会将其自动转化为00:00:00进行存储。比如1210,MySQL会将最右边的两位解析成秒,表示00:12:10,而不是12:10:00。
TIMESTAMP与DATETIME
TIMESTAMP占4个字节,范围是1970年1月1日08时00分01秒——2038年的某月某日某时某分某秒某毫秒,和时区有关,更能反应实际日期,更适合跨时区的开发或服务,但表示范围小,受mysql和sqlmodel的影响大
DATETIME占8个字节,只能反应操作时的时区的时间,但表示范围更大,1000年1月1日——9999年12月31日

至于sqlserver的日期类型

数据类型说明
date从 0001-1-1到 9999-12-31
time时间24小时制
smalldatetime日期时间 2020-05-06 12:10:20
datetime范围 1753年1月1日到9999年12月31
datetime2支持日期从0001-01-01到9999-01-01
datetimeoffset同比于TIMESTAMP

文本类型

char 与varchar
char的取值长度时0~255,其中char的默认值时1即char(1),这个我们可以自己定义如定义char(8)则最多可保存长度为8,
当然我遇到了一个问题,即,第一行的char可以保存长度为9,但不能超过9
在这里插入图片描述
varchar的最大长度mysql为65535,sqlserver的为8192,长度可变
如果字符串长度差不多,推荐使用char进行储存
varchar为可变字符串,不事先分配存储空间,最好长度不要超过5000,若超过此值,则独立一张表,改为用text来进行存储,并用主键来对应,避免影响其他字段的索引效率。来自:java开发手册之mysql数据库
至于长文本类型有 TINYTEXT,TEXT,MEDIMUTEXT,LONGTEXT,在出血阶段有、使用不多,故不作详细介绍。

至于sqlserver数据库中用的最多的文本类型,包括任意字母、符号或数字、字符的组合,主要有下面的六种:
(1)char: 固定长度的非Unicode字符数据,最大长度为8000个字符。 char(2)
(2)varchar: 可变长度的非Unicode数据,最大长度为8000个字符。 varchar(20)
(3)text:存储长文本信息,最大长度为231-1(2147483647)个字符。
(4)nchar:固定长度的Unicode数据,最大长度为4000个字符。
(5)nvarchar:可变长度的Unicode数据,最大长度为4000个字符。
(6)ntext:存储可变长度的长文本, 230-1(1073741823)个字符。
Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。
注意:带n的数据类型长度是不带n的两倍。比如nchar(1)和char(2)长度相同

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值