MySQL学习之数据类型

  1. 数据库类型
    通过给数据的不同类型强加一个一致的模式,是系统能够识别一个特定的数据属于一个特定的类型,这样就可以使用这个类型的特性来操作数据。
    强大的数据分类把每个类型与特定的行为联系在一起,执行这些行为可以预防人为的错误。数据分类在不同数据如何相互作用方面排除了不确定性,他可以减少开发者不得不写的维护系统完整性的代码的数量。
    性能的合理使用可以导致更小数据库和表、有效的索引和更快速的执行查询,而类型的无节制的、过度的使用将导致膨胀的表、存储空间的浪费、低效的索引和在性能上的退化。
  2. 数值类型
    MySQL 的数值数据类型可以大致划分为两个类型,一个整数、一个浮点。
    MySQL 允许我们指定数值字段中的值是否有正负之分或者用零填补

    在 MySQL 中支持的5个主要整数类型是 tinyint (1个字节)、smallint(2个字节)、mediumint(3个字节)、int(4个字节)和bigint(8个字节)。这些类型在很大的程度上时相同的,只有他们存储的值的大小是不相同的。
    MySQL 以一个可选择的显示宽度指示器的形式对 SQL 标准进行扩展,这样当从数据空检索一个值时,可以把这个值加长到指定的长度。
    例如,指定一个字段的类型为(int(6)),就可以保证所包含数字少于6个的值从数据库中检索出来时能够自动的用空格填充。
    使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。
    如果我们存储的字段超出允许范围的数字,MySQL 会根据允许范围最接近它的一端截断它。
    另外,MySQL 会将不合规定的值在插入表之前自动改为0,。
    每个整数类型还可以接受一个或者两个下面的可以影响他的显示和存储方式的修饰符:
            unsigned:该修饰符规定字段只保存正的值,它可以增大这个字段支持的范围。
            zerofill:该修饰符规定0(不是空格)可以用于填补输出值。使用这个修饰符可以防止 MySQL 存储负值。

    在 MySQL 中支持三个浮点类型是:float、double和decimal类型。
    与整数类型一样、这些类型也带有附加参数:一个显示宽度指示器和一个小数点指示器。
    例如:float(5,2)规定显示的值不会超过5位数字,小数点后带有2为数字。
    对于小数点后面的数字个数超过了允许的数目的值,系统会自动将它四舍五入为最接近它的值,然后插入它。
    decimal:用户要求非常高的精确度的计算中,这些类型允许指定数值的精确度和计数方法作为选择参数。精确度在这里指为这个值保存的有效数字的总个数,而计数方法表示小数点后的数字的个数。
    例如:decimal(5,2)规定了存储的值将不会超过5位数字,并且小数点后面有2位数字。
    MySQL 默认的 decimal 的精确度为10,计算方法默认为0;
  3. 字符串类型
    在 MySQL 中支持8个基本的字符串类型:char、varchar、tinyblob、tinytext、blob、text、mediumblob、mediumtext、longblob、longtext类型

    char类型认可一个可选择的 binary 修饰符,当用于比较运算时,这个修饰符使char类型以一个二进制方式(不是传统的区分大小写)起作用。

    varchar是char的一个变体,他们的区别在于 MySQL 处理这个指示器的方式:char把这个大小视为值的准确大小(用空格填补比较短的值,所以达到了这个大小),二varchar类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加一个额外的字节记录长度)。因而,较短的值当被插入一个语句为varchar类型的字段时,将不会用空格填补(然而,较长的值仍然被截断)。因为字段会根据它的内容动态的增长和缩短,所以当不确定字段要存储多少个字符时,使用 varchar 类型是一个好的想法;因为 varchar 类型只使用需要的最小数目的字节,所以它在数据库性能方面导致了更大的存储效率和(可能)空前的改进。

    text 和blob用于存储比较长的字符串(即长度超过255个字符的字符串),根据要存储数据的大小,它们都有不同的子类型。这些大数据量的类型用于存储大的文本块或者图像、声音文件那样的二进制数据。
    blob 类型区分大小写,text 类型不区分大小写。
  4. 日期和时间类型
    MySQL 带有5个不同的数据类型可供选择:date、time、year、datetime、timestamp类型
    没有冒号分隔符的time类型值可能被 MySQL 解释为持续时间,而不是时间戳

    MySQL 对日期的年份中的两个数字的值,或是语句为 year 类型的输入字段中的两个数字输入执行这种类型的最大限度的通译。因为所有的 year 类型的值必须用4个数字存储,所有 MySQL 试图根据值的数字范围把两个数字的年份转换为4个数字的值:把在00·69范围内的值转换到2000·2069 范围内,而把70·99范围内的值转换到1970·1979之内。

    datetime和timestamp这两种类型通常用于自动存储包含当前日期和时间的时间戳,并且对执行大量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序可以派上用场。
    如果一个行中第一个字段语句为 timestamp 类型,而且这个字段没有被明确地指定值或者被指定了一个 null 值,MySQL 将会自动用当前的日期和时间填充它。
    使用 MySQL 的 now()函数在语句为 datatime 类型的字段中填充当前的日期和时间可以得到相同的结果。
    虽然 MySQL 允许使用自定义的 timestamp 格式,但是他不提倡这种用法。原因是:如果我们在一个 timestamp 字段上使用自定义格式,MySQL 就不能够在这个字段上使用关键字。而且输出格式要通过使用 date_format() 函数才能得到。
    在合法范围以外的日期和时间值通常被转换为最接近它的合法范围的边界点值,然后保存它。
  5. 复合类型
    MySQL 有两个复合类型 enum 和 set,虽然这两个在类型在技术上时字符串类型,但是还是把他看成不同的分类,因为他们的值必须从一个预先定义好的字符串集合中选取。一个enum类型从一个允许值集合中只选择单个值;set类型允许从可选集合中选择任意多个值。

    enum类型在允许从集合中只选择单个值时,通常用于互斥的数据值。一个常见的列子是特别属性,它或者是男或者是女性。并且允许成员中的唯一的值或null值,任何不适用这些值而使用其他值的操作都将使 MySQL 插入一个空的字符串。如果插入值的大小写与在字段语句中相对应值的大小写不匹配,那么出入值的大小写将自动改变为与字段语句相匹配,虽然 enum的元素只能指定为字符串,但是他们在系统内部可以存储为数字并且从1开始用数字做索引,
    一个 enum 类型最多可以包含65536个元素,其中一个元素为 MySQL 保留,用来保存错误信息,这个错误值用索引0或者一个空字符串表示。
    MySQL 认为在 enum 类型语句中出现的唯一值是合法的,除了这些值外,其他任何插入值的企图都将失败,MySQL 用错误值表示出现错误了。这意味着仅仅通过搜索包含空字符串或对应数字索引为0的行就可以很容易地查出错误记录的位置。

    set类型允许从预先定义的字符串值集合中选取任意数目的值。为set类型的字段可以包含0个,1个或1个以上从允许值集合中选取的值,这使set类型可以做多个选择的选取。与enum类型一样,任何企图使用一个不再预先定义集合中的值的操作都会使用mysql插入一个空字符串。如果视图插入一个既包含合法元素又包含非法元素的记录,mysqL 将会除去非法的部分。
    一个set类型最多可以包含64项。在set类型中,值被存储为一个分离的位序列,这些位表示与它相对应的选取项。并且set类型中没有重复的元素。
    查找包含错误数据的记录的位置时,需要做的是查找包含空字符串或二进制值为0的行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值