mysql的数据类型 (转)

1. mysql的数据类型 

    mysql中有如下几种数据类型: 

    
1)数值型 

    
数值是诸如32 153.4 这样的值。mysql 支持科学表示法,科学表示法由整数或浮点数后跟“e”“e”、一个符号(“+”“-”)和一个整数指数来表示。1.24e+12 23.47e-1 都是合法的科学表示法表示的数。而1.24e12 不是合法的,因为指数前的符号未给出。 

    
浮点数由整数部分、一个小数点和小数部分组成。整数部分和小数部分可以分别为空,但不能同时为空。 

    
数值前可放一个负号“-”以表示负值。 

    
2)字符(串)型 

    
字符型(也叫字符串型,简称串)是诸如“hello, world!”一个馒头引起的血案这样的值,或者是电话号码87398413这样的值。既可用单引号也可用双引号将串值括起来。
 
    
初学者往往分不清数值87398143和字符串87398143的区别。都是数字啊,怎么一个要用数值型,一个要用字符型呢?关键就在于:数值型的87398143是要参与计算的,比如它是金融中的一个货款总额;而字符型的87398143是不参与计算的,只是表示电话号码,这样的还有街道号码、门牌号码等等,它们都不参与计算。 

    
3)日期和时间型 

    
日期和时间是一些诸如“2006-07-12”“12:30:43”这样的值。mysql还支持日期/时间的组合,如“2006-07-12 12:30:43” 

    
4null 

    null
表示未知值。比如填写表格中通讯地址不清楚留空不填写,这就是null值。 

    
我们用create table语句创建一个表(参看前面的章节),这个表中包含列的定义。例如我们在前面创建了一个joke表,这个表中有contentwriter两个列:  
 

create table
(
content varchar(20) not null,
writer varchar(10) null
)

   

 

   定义一个列的语法如下:  

col_name col_typy [col_attributes] [general_attributes]

 

 

   其中列名由col_name 给出。列名可最多包含64个字符,字符包括字母、数字、下划线及美元符号。列名可以名字中合法的任何符号(包括数字)开头。但列名不能完全由数字组成,因为那样可能使其与数据分不开。mysql保留诸如selectdeletecreate这样的词,这些词不能用做列名,但是函数名(如pos min)是可以使用的。 

    
列类型col_type表示列可存储的特定值。列类型说明符还能表示存放在列中的值的最大长度。对于某些类型,可用一个数值明确地说明其长度。而另外一些值,其长度由类型名蕴含。例如,char(10) 明确指定了10个字符的长度,而tinyblob值隐含最大长度为255个字符。有的类型说明符允许指定最大的显示宽度(即显示值时使用多少个字符)。浮点类型允许指定小数位数,所以能控制浮点数的精度值为多少。 

    
可以在列类型之后指定可选的类型说明属性,以及指定更多的常见属性。属性起修饰类型的作用,并更改其处理列值的方式,属性有以下类型: 

    
1)专用属性用于指定列。例如,unsigned 属性只针对整型,而binary属性只用于char varchar 

    
2)通用属性除少数列之外可用于任意列。可以指定null not null 以表示某个列是否能够存放null。还可以用defaultdef_value 来表示在创建一个新行但未明确给出该列的值时,该列可赋予值def_valuedef_value 必须为一个常量;它不能是表达式,也不能引用其他列。不能对blob text 列指定缺省值。 

    
如果想给出多个列的专用属性,可按任意顺序指定它们,只要它们跟在列类型之后、通用属性之前即可。类似地,如果需要给出多个通用属性,也可按任意顺序给出它们,只要将它们放在列类型和可能给出的列专用属性之后即可。

    2. mysql的列(字段)类型 

    数据库中的每个表都是由一个或多个列(字段)构成的。在用create table语句创建一个表时,要为每列(字段)指定一个类型。列(字段)的类型比数据类型更为细化,它精确地描述了给定表列(字段)可能包含的值的种类,如是否带小数、是否文字很多。 

    2.1
数值列类型 

    mysql
有整数和浮点数值的列类型,如表1所示。整数列类型可以有符号也可无符号。有一种特殊的属性允许整数列值自动生成,这对需要唯一序列或标识号的应用系统来说是非常有用的。

类型

说明

tinyint

非常小的整数

smallint

较小整数

mediumint

中等大小整数

int

标准整数

bigint

较大整数

float

单精度浮点数

double

双精度浮点数

decimal

一个串的浮点数

1:数值列类型

    每种数值类型的名称和取值范围如表2所示。

类型说明

取值范围

tinyint[(m)]

有符号值:-128 12727 27 1 
无符号值:025528 1 

smallint[(m)]

有符号值:-32768 32767215 215 1 
无符号值:06553521 1 

mediumint[(m)]

有符号值:-8388608 838860722 22  
无符号值:01677721522 1 

int[(m)]

有符号值:-2147683648 2147683647231 231- 1 
无符号值:04294967295232 1 

bigint[(m)]

有符号值:-9223372036854775808 9223373036854775807263263-1 

无符号值:0184467440737095516150264 – 1 

float[(m, d)]

最小非零值:±1.175494351e 38

double[(m,d)]

最小非零值:±2.2250738585072014e 308

decimal (m, d)

可变;其值的范围依赖于d


2:数值列类型的取值范围

    各种类型值所需的存储量如表3所示。

类型说明

存储需求

tinyint[(m)]

1字节

smallint[(m)]

2字节

mediumint[(m)]

3字节

int[(m)]

4字节

bigint[(m)]

8字节

float[(m, d)]

4字节

double[(m, d)]

8字节

decimal (m, d)

m字节(mysql 3.23),m+2字节(mysql 3.23 

3:数值列类型的存储需求

mysql提供了五种整型: tinyintsmallintmediumintintbigintintinteger的缩写。这些类型在可表示的取值范围上是不同的。整数列可定义为unsigned从而禁用负值;这使列的取值范围为0以上。各种类型的存储量需求也是不同的。取值范围较大的类型所需的存储量较大。 

    mysql 
提供三种浮点类型: floatdoubledecimal。与整型不同,浮点类型不能是unsigned的,其取值范围也与整型不同,这种不同不仅在于这些类型有最大值,而且还有最小非零值。最小值提供了相应类型精度的一种度量,这对于记录科学数据来说是非常重要的(当然,也有负的最大和最小值)。 

    
在选择了某种数值类型时,应该考虑所要表示的值的范围,只需选择能覆盖要取值的范围的最小类型即可。选择较大类型会对空间造成浪费,使表不必要地增大,处理起来没有选择较小类型那样有效。对于整型值,如果数据取值范围较小,如人员年龄或兄弟姐妹数,则tinyint最合适。mediumint能够表示数百万的值并且可用于更多类型的值,但存储代价较大。bigint在全部整型中取值范围最大,而且需要的存储空间是表示范围次大的整型int类型的两倍,因此只在确实需要时才用。对于浮点值,double占用float的两倍空间。除非特别需要高精度或范围极大的值,一般应使用只用一半存储代价的float型来表示数据。 

    
在定义整型列时,可以指定可选的显示尺寸m。如果这样,m应该是一个255的整数。它表示用来显示列中值的字符数。例如,mediumint(4)指定了一个具有4个字符显示宽度的mediumint列。如果定义了一个没有明确宽度的整数列,将会自动分配给它一个缺省的宽度。缺省值为每种类型的最长值的长度。如果某个特定值的可打印表示需要不止m个字符,则显示完全的值;不会将值截断以适合m个字符。 

    
对每种浮点类型,可指定一个最大的显示尺寸和小数位数d的值应该取255d的值可为0,但是不应大于2(如果熟悉odbc 术语,就会知道对应于odbc 概念的精度小数点位数)。mdfloatdouble 都是可选的,但对于decimal是必须的。在选项d时,如果省略了它们,则使用缺省值。 


    2.2
字符串列类型 

    mysql
提供了几种存放字符数据的串类型,其类型如下:

类型名

说明

char

定长字符串

varchar

可变长字符串

tinyblob

非常小的blob(二进制大对象)

blob

blob

mediumblob

中等的blob

longblob

blob

tinytext

非常小的文本串

text

小文本串

mediumtext

中等文本串

longtext

大文本串

enum

枚举;列可赋予某个枚举成员

set

集合;列可赋予多个集合成员

4:字符串列类型

    下表给出了mysql 定义串值列的类型,以及每种类型的最大尺寸和存储需求。对于可变长的列类型,各行的值所占的存储量是不同的,这取决于实际存放在列中的值的长度。这个长度在表中用表示。

类型说明

最大尺寸

存储需求

char( m)

字节

字节

varchar(m)

字节

1字节

tinyblob, tinytext

281字节

1字节

blob, text

216 字节

2字节

mediumblob, mediumtext

2241字节

3字节

longblob, longtext

2321字节

4字节

enum(“value1”, “value2”, ...)

65535 个成员

2字节

set (“value1”, “value2”, ...)

64个成员

1238字节

5:串列类型最大尺寸及存储需求

    以外所需的额外字节为存放该值的长度所需的字节数。mysql 通过存储值的内容及其长度来处理可变长度的值。这些额外的字节是无符号整数。请注意,可变长类型的最大长度、此类型所需的额外字节数以及占用相同字节数的无符号整数之间的对应关系。例如,mediumblob 值可能最多224 1字节长并需要个字节记录其结果。个字节的整数类型mediumint 的最大无符号值为224 1。这并非偶然。

    2.3日期时间列类型 

    mysql 提供了几种时间值的列类型,它们分别是: datedatetimetimetimestampyear。下表给出了mysql 为定义存储日期和时间值所提供的这些类型,并给出了每种类型的合法取值范围。

类型名

说明

date

“yyyy-mm-dd”格式表示的日期值

time

“hh:mm:ss”格式表示的时间值

datetime

“yyyy-mm-dd hh:mm:ss”格式

timestamp

“yyyymmddhhmmss”格式表示的时间戳值

year

“yyyy”格式的年份值

6:日期时间列类型

类型名

取值范围

存储需求

date

“1000-01-01”“9999-12-31”

3字节

time

“-838:59:59”“838:59:59”

3字节

datetime

“1000-01-01 00:00:00” “9999-12-31 23:59:59”

8字节

timestamp

19700101000000 2037 年的某个时刻

4字节

year

1901 2155

1字节

7 日前时间列类型的取值范围和存储需求

    下面举个例子:  

create table student
(
name varchar(20) not null

chinese tinyint(3)

maths tinyint(3)

english tinyint(3)

birthday date
)

 

     这个例子创建一个student表,这个表中有name字段,字符类型列,不允许null(空值)。有chinesemathsenglish三个整数类型列。还有个birthday日期类型列。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值