詳細SQLデータ型

まず、データ・タイプの紹介

  • データテーブルは、列の複数のフィールドを含み、各フィールドを指定し、異なるデータ型、データ型が指定され、それがフィールドにデータ内容を決定した後。
  • また、それらが格納されている場合の実施形態のMySQLで使用される異なるデータタイプを決定し、それらが使用される時にどのようなシンボル算術演算を選択します。
  • 値のデータ型:TINYINT、SMALINT、MEDIUMINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL。
  • 日付/時刻タイプ:YEAR、TIME、DATE、DATETIME、TIMESTAMP。
  • 文字列型:CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET。

第二に、数値型の紹介

  • タイプ主に、範囲を提供異なるタイプの異なる値をデジタル値を格納するために使用される、より大きな記憶することができる値の範囲、より大きな必要な記憶空間、
  • ①②点③固定式のフローティングタイプ整数タイプ:値タイプに分けます。

図1に示すように、整数型次のように

詳細SQLデータ型

2、浮動小数点と固定小数点型タイプ

  • MySQLは2種類があり、浮動小数点と固定小数点小数、浮動小数点を表すために使用される:単精度浮動小数点(FLOAT)と倍精度浮動小数点(DOUBLE)、DECIMALのみ固定点は、
  • 浮動小数点と固定小数点数は、(M、N)を用いることができ、Mは総ビット数で表される精度であり、ここで、Nは以下のような小数点以下の桁の数を示す目盛りで表される:M / Nで、3.145は4を表すために使用されます3;
  • DECIMAL実際の文字列は、DECIMAL型が良いだろう時間の高精度(例えば、通貨、科学的データ、等)に格納されています。
  • 与えられた点に対するフロートの利点は、特定の長さの場合には、浮動小数点データは、より広い範囲で表すことができることである、それは精度の問題という欠点を引き起こします。

詳細SQLデータ型

最適化のヒント:

  • 代わりに、ENUM、BITENUM、SETのTINYINT推奨。
  • 整数の表示幅の使用を避ける、即ち、INTを使用しない(10)と同様の手続きを直接INTによって、フィールドの表示幅を指定。
  • DECIMAL最适合保存准确度要求高,而且用于计算的数据,比如价格。但是在使用DECIMAL类型的时候,注意长度设置;
      建议使用整型来运算和存储实数,方法是,实数乘以相应的倍数后再操作;
     
    整数通常是最佳的数据类型,因为它速度快,并且能使用AUTO_INCREMENT。

3、日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

TIMESTAMP类型有专有的自动更新特性。

詳細SQLデータ型

优化建议:

  • MySQL能存储的最小时间粒度为秒。
  • 建议用DATE数据类型来保存日期。MySQL中默认的日期格式是yyyy-mm-dd;
  • 用MySQL的内建类型DATE、TIME、DATETIME来存储时间,而不是使用字符串;
  • 当数据格式为TIMESTAMP和DATETIME时,可以用CURRENT_TIMESTAMP作为默认(MySQL5.6以后), MySQL会自动返回记录插入的确切时间;
  • TIMESTAMP是UTC时间戳,与时区相关;
  • DATETIME的存储格式是一个YYYYMMDD HH:MM:SS的整数,与时区无关;
  • 除非有特殊需求,否则建议使用TIMESTAMP,它比DATETIME更节约空间。

1)YEAR

  • 格式1:以4位字符串格式表示的 YEAR ,范围为 '1901' ~ '2155';
  • 格式2:以4位数字格式表示的 YEAR ,范围为 1901 ~ 2155;
  • 格式3:以2位字符串格式表示的 YEAR ,范围为 '00' ~ '99' ,其中,'00' ~ '69' 被转换为 2000 ~ 2069 ,'70' ~ '99' 被转换为 1970 ~ 1999;
  • 格式4:以2位数字格式表示的 YEAR ,范围为 1 ~ 99 ,其中,1 ~ 69 被转换为 2001 ~ 2069 ,70 ~ 99 被转换为 1970 ~ 1999。

2)TIME

  • TIME 类型的格式为 HH:MM:SS ,HH 表示小时,MM 表示分钟,SS 表示秒
  • 格式1:以 'HHMMSS' 格式表示的 TIME ,例如 '101112' 被理解为 10:11:12 ,但如果插入不合法的时间,如 '109712' ,则被存储为 00:00:00
  • 格式2:以 'D HH:MM:SS' 字符串格式表示的 TIME ,其中 D 表示日,可以取 0 ~ 34 之间的值,在插入数据库的时候 D 会被转换成小时,如 '2 10:10' 在数据库中表示为 58:10:00 ,即 2x24+10 = 58

3)DATE

  • DATE 类型的格式为 YYYY-MM-DD ,其中,YYYY 表示年,MM 表示月,DD 表示日;
  • 格式1:'YYYY-MM-DD' 或 'YYYYMMDD' ,取值范围为 '1000-01-01' ~ '9999-12-3';
  • 格式2:'YY-MM-DD' 或 'YYMMDD' ,这里 YY 表示两位的年值,范围为 '00' ~ '99' ,其中,'00' ~ '69' 被转换为 2000 ~ 2069 ,'70' ~ '99' 被转换为 1970 ~ 1999;
  • 格式3:YY-MM-DD 或 YYMMDD ,数字格式表示的日期,其中 YY 范围为 00 ~ 99 ,其中,00 ~ 69 被转换为 2000 ~ 2069 ,70 ~ 99 被转换为 1970 ~ 1999。

4)DATETIME

  • DATETIME 类型的格式为 YYYY-MM-DD HH:MM:SS ,其中,YYYY 表示年,MM 表示月,DD 表示日,HH 表示小时,MM 表示分钟,SS 表示秒;
  • 格式1:'YYYY-MM-DD HH:MM:SS' 或 'YYYYMMDDHHMMSS' ,字符串格式,取值范围为 '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59';
  • 格式2:'YY-MM-DD HH:MM:SS' 或 'YYMMDDHHMMSS' ,字符串格式,其中 YY 范围为 '00' ~ '99' ,其中,'00' ~ '69' 被转换为 2000 ~ 2069 ,'70' ~ '99' 被转换为 1970 ~ 1999;
  • 格式3:YYYYMMDDHHMMSS 或 YYMMDDHHMMSS ,数字格式,取值范围同上。

5)TIMESTAMP

  • TIMESTAMP 类型的格式为 YYYY-MM-DD HH:MM:SS,显示宽度固定在19个字符;
  • TIMESTAMP 与 DATETIME 的区别在于,TIMESTAMP 的取值范围小于 DATETIME 的取值范围;
  • TIMESTAMP 的取值范围为 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC ,其中 UTC 是世界标准时间,存储时会对当前时区进行转换,检索时再转换回当前时区。

三、字符串数据类型

  • 字符串类型用来存储字符串数据,还可以存储比如图片和声音的二进制数据;
  • MySQL 支持两种字符串类型:文本字符串和二进制字符串。

詳細SQLデータ型

詳細SQLデータ型

优化建议:

  • 字符串的长度相差较大用VARCHAR;
  • 字符串短,且所有值都接近一个长度用CHAR;
  • BINARY和VARBINARY存储的是二进制字符串,与字符集无关;
  • BLOB系列存储二进制字符串,与字符集无关;
  • TEXT是一个更大的VARCHAR;
  • BLOB和TEXT都不能有默认值。

1、char和varchar

  • CHAR(M) 为固定长度的字符串,在定义时指定字符串列长,当保存时在右侧填充空格以达到指定的长度,M 表示列长度,取值范围是 0~255 个字符,例如,CHAR(4) 定义了一个固定长度的字符串列,其包含的字符个数最大为 4,当检索到 CHAR 值时,尾部的空格将被删掉;
  • VARCHAR(M) 为可变长度的字符串,M 表示最大列长度,取值范围是 0~65535 ,VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定,而其实际占用的空间为字符串的实际长度加一(一个字符串结束符);

2、TEXT

  • TINYTEXT 最大长度为 255 个字符;
  • TEXT 最大长度为 65536 个字符;
  • MEDIUMTEXT 最大长度为 16777215 个字符;
  • LONGTEXT 最大长度为 4294967295 个字符。

3、ENUM

在基本的数据类型中,无外乎就是些数字和字符,但是某些事物是较难用数字和字符来准确地表示的。比如一周有七天,分别是Sunday、Monday、Tuesday、Wednesday、Thursday、Friday 和 Saturday。如果我们用整数 0、1、2、3、4、5、6 来表示这七天,那么多下来的那些整数该怎么办?而且这样的设置很容易让数据出错,即取值超出范围。我们能否自创一个数据类型,而数据的取值范围就是这七天呢?因此有了 ENUM 类型(Enumeration,枚举),它允许用户自己来定义一种数据类型,并且列出该数据类型的取值范围。ENUM 是一个字符串对象,其值为表创建时在列规定中枚举(即列举)的一列值,语法格式为:字段名 ENUM ('值1', '值2', ..... '值n') 字段名指将要定义的字段,值 n 指枚举列表中的第 n 个值,ENUM类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一个。如果创建的成员中有空格时,其尾部的空格将自动删除。ENUM 值在内部用整数表示,每个枚举值均有一个索引值:列表值所允许的成员值从 1 开始编号,MySQL 存储的就是这个索引编号。枚举最多可以有 65535 个元素。

4、SET

  • SET 是一个字符串对象,可以有零个或多个值,SET 列最多可以有 64 个成员,其值为表创建时规定的一列值,语法:SET('值1','值2',...... '值n');
  • 与 ENUM 类型相同,SET 值在内部用整数表示,列表中每一个值都有一个索引编号;
  • 与 ENUM 类型不同的是,ENUM 类型的字段只能从定义的列值中选择一个值插入,而 SET 类型的列可从定义的列值中选择多个字符的联合;
  • 如果插入 SET 字段中列值有重复,则 MySQL 自动删除重复的值,插入 SET 字段的值的顺序并不重要,MySQL 会在存入数据库时,按照定义的顺序显示。

5、BIT

  • 保留ビットフィールド値に使用されるビットデータのタイプ、すなわち、そのような保存されたデータ13などのデータを保存するバイナリ形式で、実際のバイナリ値13が格納されている、すなわち、1101。
  • BITは、BIT M(M)は、Mが省略された場合BITの長さ値(M)列が割り当てられているよりも小さい場合、デフォルトは、1であり、1〜64の範囲内で、各値のビット数を表し、ビットフィールドタイプでありますMビットは、その後、左側に0価値が充填されています。
  • ビット数は、ビットの少なくとも4種類必要に応じて、ビット(4)のように定義することができ、データ1111を挿入することができないよりも大きいです。

6、BINARY和VARBINARY

  • BINARYとVARBINARY同様のタイプのCHARとVARCHAR、彼らはバイナリバイト文字列が含まれていることを除いて、
  • 固定長のBINARY型は、指定された長さの後に、指定された長さに充填された「\ 0」以下の最大長さよりも、それらは右充填されています。
  • 可変長のVARBINARY型は、指定された長さの後に、長さがゼロと最大値の間であってもよいです。

7、BLOB

  • BLOBはTINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB 4種類にバイナリ文字列の可変数を格納するために使用されます。
  • BLOBは、TEXTのテキスト文字列が格納され、バイナリ文字列を格納しています。
  • BLOBない文字セット、およびソートと比較は列の値バイト値に基づいて、テキストは文字セットを有しており、値がソートされ、文字セットを比較しています。

詳細SQLデータ型

おすすめ

転載: blog.51cto.com/14154700/2456160