MySQL的数据类型_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2226 | 回复: 0   主题: MySQL的数据类型        下一篇 
chengjun.xia
注册用户
等级:中士
经验:201
发帖:8
精华:0
注册:1970-1-1
状态:离线
发送短消息息给chengjun.xia 加好友    发送短消息息给chengjun.xia 发消息
发表于: IP:您无权察看 2016-3-22 11:27:35 | [全部帖] [楼主帖] 楼主

  1. MySQL的数据类型介绍

    MySQL数据库提供的数据类型包括:整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型和二进制类型。

    1. 整数类型



      blob.png

      不同类型的整数类型的字节数不同。根据类型所占的字节数可以算出该类型的取值范围。例如TINYINT的空间为1个字节,1个字节是8位。那么TINYINT无符号数的最大值为2^8 - 1,即为255。TINYINT有符号数的最大值为2^7 - 1,即为127。同理可以推算出其他不同整数类型的取值范围。

      MySQL支持数据类型的后面指定该类型的显示宽度。基本形式为: 数据类型(显示宽度),例如 TINYINT(4)。

      如果没有设置显示宽度,都为默认值。TINYINT类型的默认显示宽度为4;SMALLINT类型的默认显示宽度为6;MEDIUMINT类型的默认显示宽度为9;INT类型的默认显示宽度为11;BIGINT类型的默认显示宽度为20。

      在整数类型使用时,还可以搭配使用zerofill参数。zerofill参数表示数字不足的显示空间由0来填补。值得注意的是,使用zerofill参数时,MySQL会自动加上UNSIGNED属性。那么,该整数类型只能表示无符号数,其显示宽度比默认宽度小1。

      当插入数据的显示宽度大于设置的显示宽度时,数据依然可以插入,而且可以完整的显示出来,设置的显示宽度在显示该记录时会失效。

      注意:数据的宽度不能大于默认宽度。如果大于默认宽度,那该数据已经超过了该类型的最大值。因为最大值的宽度必须是小于等于默认宽度。如果一个值大于了这个类型的最大值,那么这个值是不可能插入的。

      整数类型还有一个AUTO_INCREMENT属性,该属性可以使字段成为自增字段。

    2. 浮点数类型和定点数类型

      MySQL中使用浮点数类型和定点数类型来表示小数。

      blob.png

      MySQL中可以指定浮点数和定点数的精度,基本形式为: 数据类型(M,D)

      其中数据类型参数是浮点数或定点数参数类型名称;M参数称为精度,是数据的总长度,小数点不占位置;D参数称为标度,是指小数点后的长度为D。

      注意:上述指定小数精度的方法虽然都适用于浮点数和定点数,但不是浮点数的标准用法。建议在使用浮点数时,如果不是实际情况需要,最好不要适用。如果使用了,可能会影响数据库的迁移。对定点数而言,DOUBLE(M,D)是定点数的标准格式。

      如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。不同的是,FLOAT型和DOUBLE型在四舍五入时不会报错,DECIMAL型会有警告。

      如果不指定精度,浮点数和定点数有其默认的精度。FLOAT和DOUBLE型默认会保存实际精度,但这与操作系统和硬件的精度有关。DECIMAL型默认整数位为10,小数位为0,即默认为整数。

      技巧:在MySQL中,定点数以字符串形式存储,因此,其精度比浮点数要高。而且,浮点数会出现误差,这是浮点数一直存在的缺陷。如果要对数据的精度要求比较高,还是选择定点数比较安全。

    3. 字符串类型

      1. CHAR类型和VARCHAR类型

        CHAR类型和VARCHAR类型都是在创建表时指定了最大长度,形式为:  CHAR(4)

        CHAR类型的长度是固定的,在创建表时就指定了,其长度可以使0~255的任意值。

        CARCHAR类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取0-65535之间的任意值。

      2. TEXT类型

        TEXT类型是一种特殊的字符串类型,TEXT只能保存字符数据,如新闻的内容等。TEXT类型包括TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。

      3. ENUM类型

        ENUM类型又称为枚举类型,在创建表时,ENUM类型的取值范围就以列表的形式指定了。基本形式为: 属性名 ENUM('值1','值2',...,'值N')

        ENUM类型的值只能取列表中的一个元素,其取值列表中最多能有65535个值。列表中的每个值都有一个顺序排列的编号,MySQL存入的是这个编号,而不是列表中的值。如果ENUM类型加入了NOT NULL属性,其默认值为取值列表中的第一个元素。

      4. SET类型

        基本与ENUM类型一直。但是SET类型的值可以取列表中的一个元素或者多个元素的组合,取多个元素时,不用元素用逗号隔开。SET类型的值最多只能是由64个元素构成的组合。插入记录时,SET字段中的元素顺序无关紧要,存入MySQL数据库后,数据库系统会自动按照定义时的顺序显示。

    4. 日期与时间类型

      blob.png

      1. YEAR类型

        YEAR类型使用一个字节来表示年份。给YEAR类型的字段赋值的表示方法如下:

        ·使用4位字符串或数字表示。其范围从1901~2155,输入格式为'YYYY'或YYYY。

        ·使用2位字符串表示。'00'~'69'转换为2000~2069;'70'-'99'转换为1970~1999。

        注意:使用YEAR类型时一定要注意0和'0'的区分。如果向YEAR类型的字段插入0,存入该字段的年份是0000;如果向YEAR字段插入的是'0',存入的年份是2000,'00'和'0'是一样的效果。

      2. TIME类型

        TIME类型使用3个字节来表示时间。MySQL中以HH:MM:SS的形式来显示TIME类型的值。TIME类型的范围从'-838:59:59'~'838:59:59'。使用CURRENTIME或NOW()来输入当前系统时间。

      3. DATE类型

        DATE类型用四个字节来表示日期。MySQL中是以YYYY-MM-DD的形式显示 DATE类型的值。其中,YYYY表示年;MM表示月;DD表示日。DATE类型的范围可 以从‘1000-01-01’~‘9999-12-31’。使用CURRENT_DATE或NOW()来输入当前系统日期。

      4. DATETIME类型

        DATETIME类型使用8个字节来表示日期和时间。MySQL中以‘YYYY-MM-DD HH:MM:SS’的形式显示DATETIME类型的值。从其形式可以看出,DATETIME类型可 以直接用DATE类型和TIME类型组合而成。使用NOW()来输入当前系统日期和时间。

      5. TIMESTAMP

        TIMESTAMP类型使用4个字节来表示日期和时间。TIMESTAMP类型的范围是从 1970-01-01 08:00:01~2038-01-19 11:14:07。MySQL 中也是以‘YYYY-MM-DD HH:MM:SS' 的形式显示TIMESTAMP类型的值。从其形式可以看出,TIMESTAMP类型与DATETIME 类型显示的格式是一样的。

        TIMESTAMP类型还有一个很大的特殊点,就是时间是根据时区来显示的。例如,在东八区插入的TIMESTAMP类型为2009-09-30 ]4:21:25。在东七区显示时,时间部分就变成了 13:21:25。在东九区显示时,时间部分就变成了 15:21:25。需要显示日期与时间,TIMESTAMP类型能够根据不同地区的时区来转换时间。但是,TIMESTAMP类型的范围太小。其最大时间为2038-01-19 11:14:07。如果插入的时间 比这个大,将会出错。例如,输入2038-01-19 11:14:08,系统会出现“ERROR1292(22007): tocorrect datetime value: '2038-01-19 11:15:08' for column 'a' at row 1 ”这样的错误提示。因此,若需要的时间范围比较大,还是选择DATETIME类型比较安全。

    5. 二进制类型

      1. BINARY和VARBINARY类型

        BINARY类型和VARBINARY类型都是在创建表时指定了最大长度,其基本形:字符串类型(M)

        其中,“字符串类型”参数指定了数据类型为BINARY类型还是VARBINARY类型;M参数指定了该二进制数的最大字节长度为M。

        BINARY类型的长度是固定的,在创建表时就指定了。不足最大长度的空间由“\0” 补全。VARBINARY类型的长度是可变的,在创建表时指定了最大长度。指定好了VARBINARY类型的最大值以后,其长度可以在0到最大长度之间。

      2. BIT类型

        BIT类型也是在创建表时指定了最大长度,其基本形式:BIT(M)

        其中,“M”指定了该二进制数的最大字节长度为M,M的最大值为64。在查询BIT类型的数据时,要用BIN(字段名+0)来将值转换为二进制显示。

      3. BLOB类型

        BLOB类型是一种特殊的二进制类型。BLOB可以用来保存数据量很大的二进制数据,如图片等。BLOB类型包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。这几种BLOB类型最大的区别就是能够保存的最大长度不同。LONGBLOB的长度最大,TINBLOB的长度最小。BLOB类型与TEXT类型很类似。不同点在于BLOB类型用于存储二进制数据,BLOB 类型数据是根据其二进制编码进行比较和排序。而TEXT类型是文本模式进行比较和排序的。

  2. 常见问题

    1. MySQL中什么数据类型可以存储路径

      MySQL中,CHAR、VARCHAR等字符串类型都可以存储路径。但是,如果路径中使用"\"符号时,这个符号会被过滤。解决的办法是,路径中用"/"或"\\"来 代替"\"。这样,MYSQL就不会自动过滤路径的分隔字符,可以完整的表示路径。

    2. MySQL中如何使用布尔类型

      在SQL标准中,存在BOOL和BOOLEAN类型。MySQL为了支持SQL标准,也是可以定义BOOL和BOOLEAN类型的。但是,BOOL和BOOLEAN类型最后转换成的是TINYINT(1).也就是说,在MySQL中,布尔类型等价于TINYINT(1)。因此,创建表的时候将一个字段定义成BOOL和BOO类型,数据库中真实定义的是TINYINT(1)。

    3. MySQL中如何存储JPG图片和MP3音乐

      一般情况下,数据库中不直接存储图片和音频文件。而是存储图片和音频文件的路径。 如果实在需要在MySQL数据库中存储图片和音频文件,就选择BLOB类型。因为,BLOB类型可以用来存储二进制类型的文件。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论