mysql设计数据表类型选择_mysql表设计----列类型介绍

author:skate

time:2012/02/18

mysql表设计-------列类型介绍

在我们设计数据库时一些经验,合理的评估表的增量,预计大小,分库分表、整库表的数量(为了方便维护与性能,mysql库一般500张表以里)等。

从基本的说起,我们创建表除了考虑架构上表的设计原则,更要从基本考虑,这对于大系统来说非常重要

命名规则:合理规划整库的命名规则,这样方便开发与维护

列类型的选择:这个对于sql的优化,数据存储空间等都非常重要,下面就简单介绍下mysql列类型

数值类型:

BIT(M):

位字段类型。M表示每个值的位数,范围为从1到64。M默认为1。

TinyINT(M):

带符号的范围是-32768到32767。无符号的范围是0到65535。1字节。

SmallINT(M):

带符号的范围是-32768到32767。无符号的范围是0到65535。2字节。

MediumINT(M):

带符号的范围是-8388608到8388607。无符号的范围是0到16777215。3字节。

INT(M):

带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。4字节。

BigINT(n):

带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。8字节。

Decimal(m,n): M是总位数,D是小数点(标度)后面的位数。实际上是VARCHAR存储。

FLOAT(M,D):

小(单精度)浮点数,M是小数纵位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数位,带符号的范围是 -3.402823466E+38 to -1.175494351E-38,无符号的范围是0 and 1.175494351E-38 to 3.402823466E+38, 4 字节

DOUBLE(M,D):

普通大小(双精度)浮点数,M是小数总位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。双精度浮点数精确到大约15位小数位,带符号的范围是 -1.7976931348623157E+308 to -2.2250738585072014E-308,无符号的范围是0 and 2.2250738585072014E-308 to 1.7976931348623157E+308,8 字节

数值类型处理函数:算数符运算:SELECT expr;

数学函数:ABS(x),x的绝对值。

CEIL(x),返回不小于X 的最小整数值。

FLOOR(x),返回不大于X的最大整数值

CRC32(x),计算循环冗余码校验值。

RAND(),返回0~1直接随机浮点数。

SIGN(x),返回x的符号

TRUNCATE(X,D),返回X被舍去至小数点后D位的数字。

日期类型:TIMESTAMP:

以'YYYY-MM-DD HH:MM:SS'格式检索和显示TIMESTAMP值。支持的范围为‘1970-01-01 00:00:00’到2037年。占用4字节

DATETIME:

以'YYYY-MM-DD HH:MM:SS'格式检索和显示DATETIME值。支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。占用8字节。

DATE:

用'YYYY-MM-DD'格式检索和显示DATE值。支持的范围是'1000-01-01'到 '9999-12-31'。占用4字节。

日期类型处理函数DATE_SUB/DATE_ADD:对时间进行加减。

CURDATE():将当前日期按照‘YYYY-MM-DD’ 或YYYYMMDD 格式的值返回。

NOW():返回当前日期和时间值,其格式为 ‘YYYY-MM-DD HH:MM:SS’ 或YYYYMMDDHHMMSS。

组合使用:mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);

-> '1998-02-02'

字符类型Char(M):

长度固定为创建表时声明的长度M。长度可以为从0到255的任何值。当保存CHAR值时,在它的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除。在存储或检索过程中不进行大小写转换。占用空间(M*每字符字节长度),UTF8为3字节。

VarChar(M):

列中的值为可变长字符串。长度可以指定为0到65,535之间的值。VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。占用空间(M*每字符字节长度+长度记录位)。

TINYTEXT:

真实字符+1个字节,255 字节

TEXT:

真实字符+2个字节,65,535 字节

MEDIUMTEXT:

真实字符+3个字节,16,777,215 字节

LONGTEXT:

真实字符+4个字节,4,294,967,295 字节

字符类型处理函数:CHAR_LENGTH(str):返回值为字符串str的长度,长度的单位为字符。

LENGTH(str):返回值为字符串str 的长度,单位为字节。

CONCAT(str1,str2,...):返回结果为连接参数产生的字符串。

CONCAT_WS(separator,str1,str2,...):第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。

LEFT(str,len):返回从字符串str开始的len最左字符。

RIGHT(str,len);从字符串str 开始,返回最右len 字符。

SUBSTRING(str,pos,len):从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。

LOWER(str):返回字符串 str 变为小写字母的字符。

UPPER(str):返回字符串str转化为大写字母的字符。

二进制类型:BINARY(M):

M字节,255个字符

VARBINARY(M):

M+1OR M+2 字节;65,533 字节

TINYBLOB:

真实字节+1个字节;255 字节

BLOB:

真实字节+2个字节;65,535 字节

MEDIUMBLOB:

真实字节+3个字节;16,777,215 字节

LONGBLOB:

真实字节+4个字节;4,294,967,295 字节

类型处理小技巧:IP存储:INET_ATON(expr),将IP转换为整数。

INET_NTOA(expr),将整数转换为IP。

mysql> SELECT INET_ATON('209.207.224.40');

-> 3520061480

mysql> SELECT INET_NTOA(3520061480);

-> '209.207.224.40‘

判断IP段:INET_ATON('209.207.224.1') <= IP AND IP <= INET_ATON('209.207.224.255');

VARCHAR存储:(3*4+3)+1=16位,UTF8字符集15*3+1=46字节

INT存储:4字节

-----end------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值