MySQLは複数のデータ型、数値、日付/時刻の主な種類、文字列をサポートしています。
1)値のデータ型:整数型TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
10進浮動小数点データ型のFLOAT、DOUBLE
固定小数点型DECIMAL
2)日付/時刻タイプ:YEAR、TIME、DATE、DATETIME、TIMESTAMP
3)文字列型:CHAR、VARCHAR、BINARY、VARBINARY、TEXT、ENUM、SETなど。文字列型は、テキスト文字列とバイナリ文字列に分かれています。
整数型
異なるタイプを格納するために必要なバイト数の異なる整数は、各データ型が占めるバイト数に応じて、例えばTINYINTがその最大符号なし次いで、1バイト(8ビット)のストレージを必要とする範囲で決定することができますすなわち、8-1 2 ** 255; 127 = 2 ** 7-1の最大値に署名しました。
次の表は、異なるデータ型の範囲であります
追加データテーブルは、11が指定されたデータ型の表示幅を表すデータ型int(11)は、デジタル値の所定の数を表示することができます。
データタイプと値の範囲とは無関係に表示幅。値が表示幅が挿入されているよりも大きい場合に限り、値のタイプの範囲を超えないように、値がまだある、ブロードバンドデジタル表示の数は、ビット数が幅指定された値よりも小さい空間によって移入唯一最大の既知のMySQLを、示すことができます挿入することができ、それを表示することができます。
テーブル構造を定義する際に、表示幅が指定されていない場合、指定された幅値の種類ごとにシステムデフォルト。
例としては、異なるデータ型のためのシステムは、ディスプレイ異なる幅を指定することが分かります。ケース型TINYINTにおいて、TINYINT符号付きおよび符号なしのタイプは桁のマイナス記号アカウントので、255 127および0〜-128であるので、4ビットのデフォルトの表示幅。
浮動小数点と固定小数点
MySQLは10進浮動小数点を使用して固定小数点で表されます。
浮動小数点と固定小数点型は(M、N)を用いることができ、Mは総ビット数で表される精度を表し、表され、Nはスケールを表し、小数点以下の桁数を示しています。
日付と時刻タイプ
年:
YEARタイプは貯蔵中に、1バイトのみがフォーマットYEARの様々な使用のための値を指定することができ、単一バイトのタイプを表すために使用されます。
1)4年、文字列または数値形式4〜2155 1901の範囲。入力形式は、「YYYY」またはYYYYです。
文字列形式2で表される2)YEAR、 '00' 〜'99」の範囲。「00」〜「69」は2069年に2000に変換されます;「70」〜「99」が1970年から1999年までの範囲に変換されます。それは2000に変換される値の範囲を超えて挿入します。
3)デジタル表現に2。〜2069〜69 1〜2001 99.1はに変換され、70〜99は、変換する代わりに、1970年から1999.0 0000、2000に変換されます。
時間
TIMEタイプは、3つのバイトを格納する際に必要な時間情報の値のみを必要とします。フォーマットは "HH:MM:SS" であります
59:59から838:59:59の範囲は-838 TIMEです。タイプは、一日の時間を表し時間も前回イベントまたは二つの事象間の時間間隔ことができるので、時間のような大部分だけではありません。TIMEは、値を指定された様々なフォーマットを使用することができます。
1) 'D HH:MM:SS' 文字列形式。Dは* 24 + HHデータベースに挿入された場合、0〜34の間の値を取ることができるが、フォーマットDセーブDの時間に変換し、その日を表します
2)または値HHMMSS形式「HHMMSS」フォーマット。101211例えば10時12分11秒に理解されている。ただし、値は例えば、有効でない場合は、「109 712」は、この時点では意味の分を持っていない、00:00:00に理解し、
注記:コロン、秒、右端の2桁、など1112は、mysqlの夜12時11分12秒として解釈されない場合
あなたは、コロンを使用している場合は、一日の時間と見られていました。例えば'11のため:12「11時12分00秒と解釈され
3)システム日:CURRENT_TIMEまたはNOW()
データの種類
データ型が使用されている日付値のみを必要とし、時間の部分は3つのバイトを保存する必要はありません。
日付の形式は次のとおりです。 'YYYY-MM-DD'
1)日付文字列の書式 'YYYY-MM-DD' または 'YYYYMMDD' に、範囲は '1000年1月1日' 〜〜 '9999-12-31'
2)日付の書式文字列 'YY-MM-DD' または 'YYMMDD' です。「00」〜「69」は2069年に2000に変換されます;「70」〜「99」が1999年に1970年から年の範囲に変換され、
3)又はYY-MM-DDフォーマットYYMMDD。
4)システムの日付を使用します。CURRENT_DATE()またはNOW()
DATATIMEタイプ
日付と時刻の情報を含める必要で使用DATATIMEタイプ値は、記憶装置は8つのバイトを必要とします。
1) 'YYYY-MM-DD HH:MM:SS' または文字列形式の 'YYYYMMDDHHMMSS' 値。
2) 'YY-MM-DD HH:MM:SS' 日付または文字列形式の 'YYMMDDHHMMSS'。
3)日時YYYYMMDDHHMMSS YYMMDDHHMMSS又はデジタルフォーマット。
TIMESTAMP
MM:SS、貯蔵中に4つのバイトを必要と同じ表示形式DATATIMEとTIMESTAMPは、表示幅は、固定YYYY-MM-DDD HH 19文字の日付形式です。
14::TIMESTAMP列は、1970年1月1日夜12時00分01秒 『UTCです~~』 2038年1月1日03 DATATIMEの範囲の範囲よりも小さい07'UTC。UTCは、世界標準の時間であるので、あなたは、データを挿入すると、その値の有効範囲内に確保するために。
DATATIME日付を格納する場合、実際の入力フォーマットを記憶するようによれば、入力何何に関係なく時間帯の、格納されています。
格納されたタイムスタンプ値がUTC、現在のタイムゾーンの変換ストレージに保存され、検索の際に現在のタイムゾーンに変換されます。クエリは、現在の時間帯に応じて、表示された時間値が異なる場合には、です。
テキスト文字列型
文字列データ型の文字列を格納するために使用され、文字列がほかに格納することができる、あなたはまた、このような絵や音のバイナリデータとして他のデータを格納することができます。
テキスト文字列とバイナリ文字列:MySQLは、文字データの2種類をサポートしています。
1)CHARタイプVARCHARと
CHAR(M)は、固定長の文字列、定義で指定された列の文字列の長さです。指定された長さのスペースで埋め右にするときに保存されました。Mが列の長さを表し、mは0〜255文字の範囲です。
VARCHAR(M)は、Mが列の最大長さである、可変長の文字列です。Mは0から65635の範囲です。
最長の行のサイズと使用される文字セット、例えば1 VARCHAR(50)に加えて、文字列の実際の長さによって占められる実際の空間によって決定VARCHAR最大の実用的な長さは、弦50の最大長さを規定します10の文字として挿入された文字列として長い場合は、実際のメモリは10の文字と終了文字列です。VARCHAR末尾のスペースを節約し、検索の値にとどまります。
2)テキストタイプ
あなたが保存またはTEXTカラムの値を照会するときTEXTカラムは、などの記事、レビュー、などの非バイナリ文字列を、保持、末尾のスペースは削除されません。テキストタイプは、ストレージスペースとデータ長の異なる4種類に分けられます。
255(2 ** 8--1)文字のTEXTカラムのTINYTEXT最大長
文字列のテキスト65535(2 ** 16-1)のTEXT最大長
16777215(2 ** 24--1)文字テキスト列のMEDIUMTEXT最大長
4,294,967,295(2 ** 32--1)文字テキスト列のLONGTEXT最大長
3)列挙型
ENUMは、文字列オブジェクト、値のテーブルが作成され、所定の列に列挙された値です。
構文:
例:
4)セットタイプ
セットタイプは、文字列オブジェクト、ゼロ以上の値、SETカラムは最大64人のメンバーを有することが可能です。
構文:
ENUM同じタイプ、内部整数表現におけるSETは、リスト内の各値は、インデックス番号を有します。あなたがテーブルを作成すると、末尾のスペースは、メンバーは自動的に削除されますSET。
ENUM型が異なるが、フィールドの列挙型は、定義された選択された列値から挿入することができ、及び型ジョイントを設定する複数の文字から選択することができます。
あなたは、フィールドプロットでSET列の値を挿入すると、MySQLは自動的に重要な、MySQLのデータを一度に保存されますされていない、重複した値を削除するためのSETフィールド値を挿入し、精細ディスプレイの順序、あなたが間違った値を挿入した場合、デフォルト場合は、MySQLは、これらの値を無視し、警告を与えます。
バイナリ文字列型
1)BIT类型
BIT类型是位字段类型。M表示每个值得位数,范围是1~64.如果M被省略,默认为1.如果为BIT(M)列分配得值得长度小于M位,在值的左边用0填充。BIT数据类型可以用来保存字段值
b+0表示将二进制的结果转换为对应的数字的值,bin()函数将数字转换为二进制。
2)BINARY和VARBINARY类型
BINARY和VARBINARY类型类似与CHAR和VARCHAR,不同的是它们包含二进制字节字符串。
BINARY类型的长度是固定的,指定长度之后,不足最大长度的,将在右边填充‘\0'补齐达到指定长度。
VARBINARY类型的长度是可变的,指定长度之后,其长度可以在0到最大值之间。例如:指定列数据类型为 VARBINARY(20),如果插入的值的长度只有10,则实际存储空间为10加1,即实际占用空间为字符串的实际长度加1.
3)BLOB类型
如何选择数据类型
1.整数和浮点数
如果不需要小数部分,则使用整数来保存数据;如果需要表示小数部分,则使用浮点数类型。对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。例如,如果列的值的范围为1~9999,若使用整数,则 MEDIUMINT UNSIGNED是最好的类型:若需要存储小数,则使用 FLOAT类型。浮点类型包括 FLOAT和 DOUBLE类型。 DOUBLE类型精度比 FLOAT类型高,因此,如要求存储精度较高时,应选择 DOUBLE类型。
2.浮点数和定点数
浮点数 FLOAT、 DOUBLE相对于定点数 DECIMAL的优势是:在长度一定的情况下,浮点数能表示更大的数据范围,但是由于浮点数容易产生误差,因此对精确度要求比较高时,建议使用 DECIMAL来存储。
DECIMAL在 MySQL中是以字符串存储的,用于定义货币等对精确度要求较高的数据。在数据迁移中, float(M,D)是非标准SL定义,数据库迁移可能会出现问题,最好不要这样使用。另外两个浮点数进行减法和比较运算时也容易出问题,因此在进行计算的时候,一定要小心。如果进行数值比较,最好使用 DECIMAL类型。
3.日期与时间类型
MySQL对于不同种类的日期和时间有很多的数据类型,比如YEAR和TME。如果只需 要记录年份,则使用YEAR类型即可;如果只记录时间,只需使用TME类型。如果同时需要记录日期和时间,则可以使用 TIMESTAMP或者 DATETIME类型。
由于TIMESTAMP列的取值范围小于 DATETIME的取值范围,因此存储范围较大的日期最好使用DATETIME。TIMESTAMP也有一个 DATETIME不具备的属性。默认的情况下,当插入一条记录但并没有指定 TIMESTAMP这个列值时,,MySQL会把 TIMESTAMP列设为当前的时间。因此当需要插入记录同时插入当前时间时,使用 TIMESTAMP是方便的。另外 TIMESTAMP在空间上比 DATETIME更有效。
4.CHAR与VARCHAR
CHAR是固定长度,所以它的处理速度比VARCHAR的速度块, 但缺点是浪费存储空间。所以对于存储不大,但在速度上有要求的可以使用CHAR类型。
5.ENUM和SET
ENUM只能取单值,它的数据列表是一个枚举集合。它的合法取值列表最多允许有65535 个成员。因此,在需要从多个值中选取一个时,可以使用ENUM。比如:性别字段适合定义为ENUM类型,每次只能从“男’或‘女’中取一个值。SET可取多值。它的合法取值列表最多允许有64个成员。空字符串也是一个合法的SET值。在需要取多个值的时候,适合使用SET类型,比如:要存储一个人兴趣爱好,最好使用SET类型。ENUM和SET的值是以字符串形式出现的,但在内部,,MySQL以数值的形式存储它们。
6.BLOB和TEXT
BLOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息。BLOB 主要存储图片、音频信息等,而TEXT只能存储纯文本文件