设为首页 收藏本站
查看: 763|回复: 0

[经验分享] Mysql数据库学习(二):数据类型(数值类型 日期和时间...

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-3-3 08:58:23 | 显示全部楼层 |阅读模式
Mysql数据库学习(二):数据类型(数值类型 日期和时间类型 字符串类型)
数据类型

数值类型
日期和时间类型
字符串类型
Center.jpg


一、数值类型


整数
Center.jpg

tinyint[M] [unsigned] [zerofill]    // [ ] 表示可选,这里的M表示显示宽度,并不是取值范围,显示宽度不够前面以0填充
bool是tinyint(1)的别名



浮点型
IEEE 754浮点数表示

S:符号位
E:指数位
M:尾数位,也叫有效数字位
N =(-1)^S * M * 2^E
单精度float 4个字节 ,取值范围-3.402823466E+38~3.402823466E+38, 精度大约7位
双精度double 8个字节,取值范围  -1.7976931348623157E+308~1.7976931348623157E+308, 精度大约15位

Center.jpg Center.jpg


DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]  // M总位数,D是小数点后面的位数,这里是取值范围
real是double的别名

定点型
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]  //M缺省是10,D缺省是0
decimal取值范围与double是一样的,但是有更高的精度。
decimal存储方式,参考:http://dev.mysql.com/doc/refman/5.1/zh/precision-math.html
numeric是decimal的别名
create table t_number(a tinyint, b tinyint unsigned);insert into t_number values(100, 200);insert into t_number values(-129, 200);insert into t_number values(128, 200);insert into t_number values(127, 200);insert into t_number values(127, -1);
create table t_number2(a int(4) zerofill);insert into t_number2 values(123);insert into t_number2 values(123456);
create table t_number3(a bool);
create table t_number4(a float, b double);insert into t_number4 values(12345678.12345, 12345678.12345);insert into t_number4 values(12345678.12345, 123456789123456789.12345); /* 12345700 | 1.2345678912345678e17  */insert into t_number4 values(12345678.12345, 12345678912345.12345);

create table t_number5(a double(5,2));/* -999.99 ~999.99 */
create table t_number6(a decimal(30,6));insert into t_number6 values(123456789123456789.12345);create table t_number7(a decimal(5,2));/* -999.99 ~999.99*/二、字符串类型char(M)
varchar(M)  //这里的M表示字符数
Center.jpg
CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。

VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。VARCHAR的最大有效长度由最大行大小和使用的字符集确定。举例来说,如果字符集为uft8,那么一个字符需要3个字节来存储,则可以保存的字符数为65535/3=21845,此外还需要一个字符的位置来存储字符个数,故最大可填写的字符数为21844。若是latin1,一个字符只需1个字节存储,那么可填写的字符数为65532。

binary/varbinary
BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

字符串存储需求 Center.jpg
VARCHAR、BLOB和TEXT类是变长类型。每个类型的存储需求取决于列值的实际长度(用前面的表中的L表示),而不是该类型的最大可能的大小。例如,VARCHAR(10)列可以容纳最大长度为10的字符串。实际存储需求是字符串(L)的长度,加上一个记录字符串长度的字节。对于字符串'abcd',L是4,存储需要5个字节。
对于CHAR、VARCHAR和TEXT类型,前面的表中的值L和M应解释为字符数目,并且列定义中的这些类型的长度表示字符数目。例如,要想保存一个TINYTEXT值需要L字符+ 1个字节。

create table t_enum(sex enum('male', 'female')); /* 1 2 */insert into t_enum values('male');insert into t_enum values('female');insert into t_enum values(1);select sex+0 from t_enum;
create table t_set(favourite set('dog', 'cat', 'bird')); /* 1 10 100 */insert into t_set values('dog,cat');insert into t_set values('dog,bird');select favourite+0 from t_set;枚举/集合看过去像是字符串,实际上保存的是整数。

三、日期和时间 Center.jpg

日期和时间看起来像字符串,但是以整数来保存的。create table t_datetime(a datetime);
insert into t_datetime values('2014-01-15 10:10:10');insert into t_datetime values('9999-12-31 23:59:59');insert into t_datetime values('10000-01-01 00:00:00');insert into t_datetime values('999-01-01 00:00:00');insert into t_datetime values('99-01-01 00:00:00');insert into t_datetime values('69-01-01 00:00:00');

create table t_timestamp(a timestamp);insert into t_timestamp values('2014-01-15 10:10:10');insert into t_timestamp values('2038-01-19 03:14:07');insert into t_timestamp values('2038-01-19 03:14:08');insert into t_timestamp values('2038-01-19 11:14:07');insert into t_timestamp values('2038-01-19 11:14:08');
create table t_date(a date);insert into t_date values('2012-01-01');
create table t_time(a time); /* 可以表示时间差 */insert into t_time values('23:12:12');insert into t_time values('823:12:12');insert into t_time values('3 23:12:12'); /* 3表示3小时 */
create table t_year(a year);insert into t_year values (2000);insert into t_year values ('2155');insert into t_year values (2156);


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-15339-1-1.html 上篇帖子: Mysql数据库学习(一):数据库基本概念、关系型数据库、... 下篇帖子: Mysql数据库学习(三):表的crud操作、完整性约束、select... 数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表