关于mysql的数据类型的整理
来源:互联网 发布:淘宝考试助手 编辑:程序博客网 时间:2024/06/05 16:29
数据类型: 占byte的数量长度的作用比如tinyint(4) 无符号范围 有符号范围
tinyint 1byte不对范围起作用 0~255-128~127
smallint 2byte 不对范围起作用 0~65535-32768~32767
MEDIUMINT 3byte 不对范围起作用 0到16777215 -8388608到8388607
int 4byte 不对范围起作用 0到4294967295 -2147493648到2147493647
BIGINT 8byte 不对范围起作用 0到18446744073709551615 -9223372036854775808到9223372036854775807
FLOAT——一个小的菜单精度浮点数。支持 -3.402823466E+38到-1.175494351E-38,0和1.175494351E-38 to 3.402823466E+38,需要4个字节存储。如果是UNSIGNED,正数的范围保持不变,但负数是不允许的。
DOUBLE——一个双精度浮点数。支持 -1.7976931348623157E+308到-2.2250738585072014E-308,0和2.2250738585072014E-308到1.7976931348623157E+308。如果是FLOAT,UNSIGNED不会改变正数范围,但负数是不允许的。
CHAR——字符。固定长度的字串,在右边补齐空格,达到指定的长度。支持从0到155个字符。搜索值时,后缀的空格将被删除。
VARCHAR——可变长的字符。一个可变长度的字串,其中的后缀空格在存储值时被删除。支持从0到255字符
TEXT——支持65535个字符。要求长度+2字节的存储。 (64KB)
DATETIME——格式:'YYYY-MM-DD HH:MM:SS',范围:'1000-01-01 00:00:00'到'9999-12-31 23:59:59'
DATE——格式:'YYYY-MM-DD',范围:'1000-01-01'到'9999-12-31'
TIMESTAMP——格式:'YYYYMMDDHHMMSS'、'YYMMDDHHMMSS'、'YYYYMMDD'、'YYMMDD',范围:'1970-01-01 00:00:00'到'2037-01-01 00:00:00'
TIME——格式:'HH:MM:SS'
YEAR——格式:'YYYY,范围:'1901'到'2155'
“decimal 类型是适合财务和货币计算的 128 位数据类型。”
浮点数的精度损失可能在很多地方出现,例如d * g / g 不一定等于d,d / g * g也不一定等于d。
还有两个非常危险的错误认识!!
1、decimal不是浮点型、decimal不存在精度损失。
下面有段程序大家可以去看看结果是什么。记住!所有的浮点型变量都存在精度损失的问题,而decimal是一个不折不扣的浮点型,不论它精度有多高,精度损失依然存在!
decimal dd = 10000000000000000000000000000m;
dd += 0.1m;
Console.WriteLine ( "{0:G50}", dd );
2、decimal所能储存的数比double大,从double到decimal的类型转换不会出现任何问题。
微软在decimal的帮助上真的要好好反省了。实际上只有从整形到decimal的转换才是扩大转换,decimal的精度比double大,但所能储存的最大数却比double要小。
数据类型大小M
(默认值)范围(有符号)范围(无符号)用途tinyint [(M)] [UNSIGNED] [ZEROFILL]1字节4-128~127 (-27~27-1)0 ~ 255 (0 ~ 28-1)非常小整数值smallint [(M)] [UNSIGNED] [ZEROFILL]2字节6-32768~32767(-215 ~ 215-1)0 ~ 65535 (0 ~ 216-1) 较小整数mediumint [(M)] [UNSIGNED] [ZEROFILL]3字节9-8388608 ~ 8388607 (-223 ~ 223-1)0 ~ 16777215 (0 ~ 224-1) 中等大小整数int [(M)] [UNSIGNED] [ZEROFILL]4字节 11-2147483648 ~ 2147483647(-231 ~ 231-1)0 ~ 4294967295 (0 ~ 232-1) 标准整数integer [(M)] [UNSIGNED] [ZEROFILL]4字节 11-2147483648 ~ 2147483647(-231 ~ 231-1)0 ~ 4294967295 (0 ~ 232-1)和int相同bigint [(M)] [UNSIGNED] [ZEROFILL]8字节20-9223372036854775808 ~9223372036854775807
(-263 ~ 263-1)0 ~ 18446744073709551615
(0 ~ 264-1) 较大整数
M个字节,0 <= M <= 255 (L为固定的=255,不够补空格)
定长字符串;CHAR 类型可以使用 BINARY 修饰符。当用于比较运算时,这个修饰符使 CHAR 以二进制方式参于运算,而不是以传统的区分大小写的方式。CHAR值根据缺省字符集以大小写不区分的方式排序和比较,除非给出BINARY关键词varchar(M) [BINARY]L+1个字节,其中L <= M 且0 <= M <= 65535(MySQL5.0之前都是最大255)
变长字符串;VARCHAR 类型在使用 BINARY 修饰符时与 CHAR 类型完全相同tinyblob,tinytextL+1个字节,其中L < 28-1 (255)
tinyblob:不超过 255 个字符的二进制字符串;tinytext:短文本字符串blob,textL+2个字节,其中L < 216-1 (65535)
blob:二进制形式的长文本数据,在分类和比较时BLOB 类型区分大小写;text:长文本数据,在分类和比较时TEXT 不区分大小写mediumblob,mediumtextL+3个字节,其中L < 224-1
mediumblob:二进制形式的中等长度文本数据;mediumtext :中等长度文本数据,longblob,longtextL+4个字节,其中L < 232-1
longblob:二进制形式的极大文本数据 ;longtext :极大文本数据enum('value1','value2',...)1或2个字节,取决于枚举值的个数(最多65,535个值)
set('value1','value2',...)1、2、3、4或者8个字节,取决于set成员的数目(最多64个成员)
这里要说一点:varchar后面跟的长度表示的是保存字符的长度,保存的数据不能超过这个长度,比如varchar(4)存储的数据就不能超过4个字符。
(1)YEAR
给YEAR类型赋值可以有三种方法。
第一种是直接插入4位字符串或者4位数字。
第二种是插入2位字符串,这种情况下如果插入‘00’~‘69’,则相当于插入2000~2069;如果插入‘70’~‘99’,则相当于插入1970~1999。第二种情况下插入的如果是‘0’,则与插入‘00’效果相同,都是表示2000年。
第三种是插入2位数字,它与第二种(插入两位字符串)不同之处仅在于:如果插入的是一位数字0,则表示的是0000,而不是2000年。所以在给YEAR类型赋值时,一定要分清0和‘0’,虽然两者相差个引号,但实际效果确实相差了2000年。
(2)DATE
MySQL是以YYYY-MM-DD格式来显示DATE类型的值,插入数据时,数据可以保持这种格式。另外,MySQL还支持一些不严格的语法格式,分隔符“-”可以用“@”、“.”等众多富豪来替代。在插入数据时,也可以使用“YY-MM-DD”格式,YY转化成对应的年份的规则与YEAR类型类似。如果我们想插入当前系统的时间,则可以插入CURRENT_DATE或者NOW()。
允许使用字符串或数字把值赋给DATE列。
(3)TIME
TIME类型表示为“时:分:秒”,尽管小时范围一般是0~23,但是为了表示某些特殊时间间隔,MySQL将TIME的小时范围扩发了,而且支持负值。对TIME类型赋值,标准格式是"HH:MM:SS",但不一定非要是这种格式。如果插入的是"D HH:MM:SS"格式,则类似插入了"(D*24+HH):MM:SS"。比如插入"2 23:50:50",相当于插入了"71:50:50"。如果插入的是"HH:MM"或"SS"格式,则效果是其他未被表示位的值赋为零值。比如插入"30",相当于插入了"00:00:30";如果插入"11:25",相当于插入了"11:25:00"。
另外也可以插入‘D HH’和‘D HH:MM’,效果按上面的例子可以推理出来了吧。 在MySQl中,对于'HHMMSS'格式,系统能够自动转化为标准格式。如果我们想插入当前系统的时间,则可以插入CURRENT_TIME或者NOW()。
TIME类型允许使用字符串或数字把值赋给TIME列,只占3个字节,如果只是存储时间数据,它最合适了。
需要注意的是,没有冒号分隔符的 TIME 类型值,将会被 MySQL 理解为持续的时间,而不是时间戳。
(4)DATETIME
通常用于自动存储包含当前日期和时间的时间戳,并可在需要执行大量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序中发挥良好作用。
(5)TIMESTAMP
通常用于自动存储包含当前日期和时间的时间戳,并可在需要执行大量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序中发挥良好作用。
TIMESTAMP的取值范围比较小,没有DATETIME的取值范围大,因此输入值时一定要保证在TIMESTAMP的范围之内。它的插入也与插入其他日期和时间数据类型类似。
那么TIMESTAMP类型如何插入当前时间?第一,可以使用CURRENT_TIMESTAMP;第二,输入NULL,系统自动输入当前的TIMESTAMP;第三,无任何输入,系统自动输入当前的TIMESTAMP。
另外有很特殊的一点:TIMESTAMP的数值是与时区相关.
MySQL以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式来显示TIMESTAMP值,取决于是否M是14(或省略)、12、8或6,但是允许你使用字符串或数字把值赋给TIMESTAMP列。一个TIMESTAMP列对于记录一个INSERT或UPDATE操作的日期和时间是有用的,因为如果你不自己给它赋值,它自动地被设置为最近操作的日期和时间。你以可以通过赋给它一个NULL值设置它为当前的日期和时间
当需要存储二进制数据的时候,用到数据类型binary或者varbinary
布尔类型 bool或者boolean在mysql数据库会默认转换为tinyint(1)
还有一个类型bit,这个东西基本不用
- 关于mysql的数据类型的整理
- 关于mysql的数据类型
- 关于OC数据类型的资料整理
- 关于mysql数据类型的一点所得
- 关于MySQL数据类型的一些注意问题
- 数据类型转换的整理
- 数据类型转换的整理
- 数据类型转换的整理
- 数据类型转换的整理
- 数据类型转换的整理
- 整理的Python3数据类型
- 数据类型的笔记整理
- 关于MySql中文乱码的一些整理
- 关于mysql安装的个人整理
- 【MySQL】MySQL的数据类型
- 整理的JavaScript的数据类型
- 数据类型的转换 笔记整理
- 自己整理的SQL数据类型
- Unity3D整合到iOS工程
- 从零开始实现Kmeans聚类算法
- sql在MySQL中的使用
- java单例模式
- lyx使用入门
- 关于mysql的数据类型的整理
- Jackson框架解析Json
- 用ajax+jQuery 实现页面加载更多(另类的分页)
- 异步服务端 boost asio
- WebUpload 视频上传,支持多视频上传
- 表单提交之后怎样让它保持之前选择<select></select>
- 开源软件许可证—GPL、AGPL、LGPL、Apache、ZLIB/LIBPNG、MIT
- 【DevExpress v17.2新功能预告】DevExtreme TreeList
- c++中的fread函数