mysql 数据类型

来源:互联网 发布:淘宝友情链接有用吗 编辑:程序博客网 时间:2024/06/06 12:53

ASCII码:

1个英文字母(不分大小写)一个字节的空间

1个中文汉字占两个字节的空间

1个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255如一个ASCII就是一个字节。

UTF-8编码:
  一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
Unicode编码:
  一个英文等于两个字节,一个中文(含繁体)等于两个字节。
  符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”1个字节的大小,中文句号2字节的大小。

Number 类型:

数据类型

范围

描述

tinyint(size)

1个字节 (-128~127)

-128 127常规。0255无符号*。在括号中规定最大位数。

smallint(size)

2字节 (-32768~32767

-32768 32767常规。065535无符号*。在括号中规定最大位数。

mediumint(size)

3字节 (-8388608~8388607)

-8388608 8388607普通。0 to 16777215无符号*。在括号中规定最大位数。

int(size)

4字节(-2147483648~2147483647)

-2147483648 2147483647常规。04294967295无符号*。在括号中规定最大位数。

bigint(size)

8字节(+-9.22*10的18次方)

-9223372036854775808 9223372036854775807常规。018446744073709551615无符号*。在括号中规定最大位数。


Float类型:上面定义的都是有符号的,当然了,也可以加上unsigned关键字,定义成无符号的类型,那么对应的取值范围就要翻翻了,比如:tinyint  unsigned的取值范围为                            0~255。

数据类型

范围

描述

FLOAT(size,d)

4字节,单精度浮点型

带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。

DOUBLE(size,d)

8字节,双精度浮点型

带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。

DECIMAL(size,d)

decimal是存储为字符串的浮点数

作为字符串存储的 DOUBLE 类型,允许固定的小数点。

我在MySQL中建立了一个表,有一列为float(5, 3);做了以下试验:

1.插入123.45678,最后查询得到的结果为99.999;
2.插入123.456,最后查询结果为99.999;
3.插入12.34567,最后查询结果为12.346;

所以,在使用浮点型的时候,还是要注意陷阱的,要以插入数据库中的实际结果为准。

Text类型:

数据类型

范围

描述

CHAR(size)

固定长度,最多255个字符

保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255个字符。

VARCHAR(size)

可变长度,最多65535个字符

保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。

注释:如果值的长度大于 255,则被转换为TEXT 类型。

TINYTEXT

可变长度,最多255个字符

存放最大长度为 255 个字符的字符串。

TEXT

可变长度,最多65535个字符

存放最大长度为 65,535 个字符的字符串。

MEDIUMTEXT

可变长度,最多2的24次方-1个字符

存放最大长度为 16,777,215 个字符的字符串。

LONGTEXT

可变长度,最多2的32次方-1个字符

存放最大长度为 4,294,967,295 个字符的字符串。

(一)char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节。

(二)同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。

(三)超过char和varchar的n设置后,字符串会被截断。

(四)char的上限为255字节,varchar的上限65535字节,text的上限为65535。

(五)char在存储的时候会截断尾部的空格,varchar和text不会。

(六)varchar会使用1-3个字节来存储长度,text不会。

(二进制数据)类型:

数据类型

范围

描述

BLOB

 0~65535字节

用于 BLOBs (Binary Large OBjects)。存放最多65,535 字节的数据。

MEDIUMBLOB

 0~16777215字节 中等长度

用于 BLOBs (Binary Large OBjects)。存放最多16,777,215 字节的数据。

LONGBLOB

 0~4294967295字节 大长度

用于 BLOBs (Binary Large OBjects)。存放最多4,294,967,295 字节的数据。

TEXT 和 BLOB 类型在分类和比较上存在区别。BLOB 类型区分大小写,而 TEXT 不区分大小写。大小修饰符不用于各种 BLOB 和 TEXT 子类型。

比指定类型支持的最大范围大的值将被自动截短。

Date类型:

数据类型

描述

DATE()

日期。格式:YYYY-MM-DD

注释:支持的范围是从 '1000-01-01' '9999-12-31'

DATETIME()

*日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS

注释:支持的范围是从 '1000-01-01 00:00:00' '9999-12-31 23:59:59'

TIMESTAMP()

*时间戳。TIMESTAMP值使用 Unix纪元('1970-01-01 00:00:00' UTC)至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS

注释:支持的范围是从 '1970-01-01 00:00:01' UTC '2038-01-09 03:14:07' UTC

TIME()

时间。格式:HH:MM:SS 注释:支持的范围是从'-838:59:59' '838:59:59'

YEAR()

2 位或 4 位格式的年。

注释:4 位格式所允许的值:190121552位格式所允许的值:7069,表示从1970 2069

* 即便 DATETIME TIMESTAMP 返回相同的格式,它们的工作方式很不同。在INSERT UPDATE 查询中,TIMESTAMP自动把自身设置为当前的日期和时间。TIMESTAMP也接受不同的格式,比如 YYYYMMDDHHMMSSYYMMDDHHMMSSYYYYMMDDYYMMDD

Other类型:

数据类型

描述

ENUM(x,y,z,etc.)

允许你输入可能值的列表。可以在 ENUM 列表中列出最大65535 个值。如果列表中不存在插入的值,则插入空值。

注释:这些值是按照你输入的顺序存储的。

可以按照此格式输入可能的值:ENUM('X','Y','Z')

SET

ENUM 类似,SET最多只能包含 64个列表项,不过 SET可存储一个以上的值。

ENUM 类型

ENUM 类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。ENUM 类型字段可以从集合中取得一个值或使用 null 值,除此之外的输入将会使 MySQL 在这个字段中插入一个空字符串。另外如果插入值的大小写与集合中值的大小写不匹配,MySQL 会自动使用插入值的大小写转换成与集合中大小写一致的值。

ENUM 类型在系统内部可以存储为数字,并且从 1 开始用数字做索引。一个 ENUM 类型最多可以包含 65536 个元素,其中一个元素被 MySQL 保留,用来存储错误信息,这个错误值用索引 0 或者一个空字符串表示。

MySQL 认为 ENUM 类型集合中出现的值是合法输入,除此之外其它任何输入都将失败。这说明通过搜索包含空字符串或对应数字索引为 0 的行就可以很容易地找到错误记录的位置。

SET 类型

SET 类型与 ENUM 类型相似但不相同。SET 类型可以从预定义的集合中取得任意数量的值。并且与 ENUM 类型相同的是任何试图在 SET 类型字段中插入非预定义的值都会使 MySQL 插入一个空字符串。如果插入一个即有合法的元素又有非法的元素的记录,MySQL 将会保留合法的元素,除去非法的元素。

  一个 SET 类型最多可以包含 64 项元素。在 SET 元素中值被存储为一个分离的“位”序列,这些“位”表示与它相对应的元素。“位”是创建有序元素集合的一种简单而有效的方式。并且它还去除了重复的元素,所以 SET 类型中不可能包含两个相同的元素。

希望从 SET 类型字段中找出非法的记录只需查找包含空字符串或二进制值为 0 的行。

 

1. unique

被赋予unique属性的列将确保所有值都有不同的值,只是null值可以重复。一般会指定一个列为unique,以确保该列的所有值都不同。例如:

代码如下:


email varchar(45) unique

   2.  Zerofill

zerofill属性可用于任何数值类型,用0填充所有剩余字段空间。例如,无符号int的默认宽度是10;因此,当“零填充”的int值为4时,将表示它为0000000004。例如:

代码如下:


orderid int unsigned zerofill not null

   3. Default

赋予某个常量值,这个值必须是常量,因为MySQL不允许插入函数或表达式值。此外,此属性无法用于BLOB或TEXT列。

代码如下:


subscribed enum('0', '1') not null default '0'

 

原创地址:http://www.jb51.net/article/20555.htm  和 http://www.jb51.net/article/55853.htm

0 0