发新话题
打印

[理论探讨] MySql中列的类型

MySql中列的类型

MySql中列的类型可以分为三大类:
! l" i) G8 A4 \& y6 Y
8 z( }  {: Y' H  |1 }1.文本类型
; d1 r# C) \: U* y6 o( T: E3 R. _7 f( p, S" Q. Y- B- Q
char3 J3 I2 \2 Z" s6 f: S. R8 b" E
" \  W& h& w8 @. G
用法:char(length)/ B" Q5 ^7 ]/ M4 m7 R  n
$ k3 t3 Q+ \, m9 y" K3 d
char类型最大长度是255个字符。当插入到表中的字符串的长度小于length时候,将给字段右边不够的部分用空格填补。
7 D0 [) P* _6 [, X: F, r
" ^" R& \4 W: j' |varchar0 O  D* K, w6 m  g. d' o1 t) B
+ N" b: w: b- s* T3 {
用法:varchar(length), O! E/ t7 u/ e& W' R
$ D' C" ]/ \' N- l' B' d$ \
varchar的最大长度是255个字符。varchar和char几乎一样,区别在于varchar是变长的类型,不会填补空格。
; T# t; n# W2 W! c! z, k# y0 X: O1 ~# c' r" ^7 t: f' }+ `' L1 @
tinytext
, H6 u- J1 X; [0 c  D4 M& c; p
$ F. F0 Y6 p! O3 ~% z用法:tinytext# H4 l) b, N4 K- A% m  C

3 P/ S2 z. I; d( O' u# G1 k) Ltinytext最大长度是255字符。
* o9 S1 b7 k) H( z: r3 l2 V, i6 r/ Q0 q: w
text
8 U  k0 x8 R$ G+ }
; N1 F5 V2 i7 Q% Z用法:text
3 C% D4 n2 t, X9 J0 m
  W3 [) j6 n7 c( k+ B( U9 v" |2 ]text最大长度是65535(2的17次方)字符。& r7 w: X: B" s2 {1 ]' x- a! _
, }: r  U) z+ k# w# W7 b0 Q
mediumtext
0 A0 S* x+ z& |: w3 P! j+ A! T$ e1 U( {6 v) W9 i
用法:mediumtext
( [% n( r1 H( w) z, h, C/ H" e1 g. I. c' }# h% B& T
mediumtext最大长度是16777215个字符。  Z# i5 B( m( d4 M) t+ y! n' e

: B' ~/ f' e; O3 D. }longtext
" L) W; W( `/ j/ A8 D8 ]. b: w
! m/ x5 `8 B  B& s+ U% n( q# U/ A用法:longtext7 c6 ?! k; }$ _

9 F7 t+ z" \; h4 Z8 E% J5 Slongtext最大长度是4294976259个字符。
: j2 v( b, D7 @4 Y& Z. X, [+ ^9 F+ i) I
(***tinytext,text,mediumtext,longtext这四种类型,都是可边长字段类型,与varchar一样,只是最大长度不同而已)
1 j5 }  j" J6 w  t! d3 W
+ f: Q8 g" [0 D, menum4 [1 C+ ?* h3 u9 ^3 Z8 [& z6 _

. Y3 B* H" {) [/ C. s/ m用法:enum('value1','value2','value3',....)[default 'value']
7 U$ s8 h$ o: q. l0 y- e5 \, {
使用enum的时候,可以限制插入的值只能是括号里包含的值列表中的一个,同时也可以用可选的default 'value'指定缺省情况下的值。% |! N9 X6 @# ^" K& y7 R
1 W% }, r6 n( L( |
set
% ]% ^% f/ d) c" }& \& U& C
8 U' g1 k; l3 s4 b% _- S, l用法:set('value1','value2','value3',...)[default 'value']
1 o8 M( V  [: `! Z' q6 y9 {$ c9 v+ c3 ?# ], d, G6 ?0 w3 E% @8 X
使用set的时候,可以限制插入的值只能是括号里包含的值列表中的一个或多个,同时也可以用可选的default 'value'指定缺省情况下的值。* s0 J% E7 P: @2 J( [: }3 V
' R9 }  |, `7 D; m& r1 w( m1 F5 v# e
9 V1 u% X( }3 U& n% p
5 M+ d$ u- m" w, `8 M2 I, h' O5 c/ ]
2.数字类型& i- d2 h3 d4 O& k/ d; \# P9 Y7 V

2 L0 Z& E2 D, Q8 Nint/integer
$ T+ J  a' {, A' k1 a3 Q3 I+ ^1 F1 w3 T7 U! ?9 X
用法:int(display size)[unsigned][zerofill]# u5 t" T% C9 a3 F% a% e4 B

% X: N7 ?4 r; xtinyint) [" T: _* _, @+ r  R
8 `  a8 U! l% S; S
用法:tinyint(display size)[unsigned][zerofill]7 \# {% f8 O- c5 s1 `8 _3 H

! _3 f! S4 p) `, v9 m; y( Q$ f* Lmediumint, R% h5 N. W0 F4 M6 V& k+ ]* g* ^
9 C( p- s: n) P- D# A4 {
用法:mediumint(display size)[unsigned][zerofill]
  S$ K5 M% x+ P0 N- x
9 z) y5 ^6 Y- ~4 `! ^  obigint; x/ r, [3 Q/ G2 e  G( f, f4 H+ s  k
- g4 G! {! w( h7 P) [9 @
用法:bigint(display size)[unsigned][zerofill]
! T  J- c% r- S8 U& [, S" f+ x9 V: l
float
: y, k" ^# ]/ O* E8 N9 v, P
* ~( y6 t8 U+ v1 K3 A8 X7 j//用法:float()[zerofill]( q/ c9 a3 u8 [
9 A+ ^( f4 ~8 c5 L+ G" ?0 I& ^! |
用法:float[(m,d)][zerofill]
7 t: m' k/ y8 m. m/ B' S# v2 H- B' S1 T& \5 M' G
表示一个小的浮点数(单精度),不能是无符号数。m表示显示宽度,d表示精度。
! E/ }* h/ W) s/ n2 g% z2 Y7 @3 i
# B, v' E; D* kdouble
. C2 [  T% f) C
" H. Q' N  N5 ^! k用法:double[(m,d)][zerofill]
; D/ ~4 c. p# m  t4 Z  \+ d6 x4 K) p
表示一个双精度浮点数,不能是无符号数。m表示显示宽度,d表示精度。
/ X- I- Z; D6 Q) h5 s
9 }: z5 A$ T3 ?7 o. J3 I# s9 Kdecimal/numeric
' g9 ^3 [; `( G! x- p2 q# i
, V. [: G7 }3 F7 V" r用法:decimal[(m[,d])][zerofill]$ a, w- s- u# `* G

9 s& x) @% [4 hdecimal列中的数字被存储为字符,每个数字被存储为一个字符串,每个字符代表值的每一位数。如果d为0则表示没有小数点。decimal的最大范围和double一样,但是实际的范围是给定的参数m指定的,如果省略m,则m为0。
1 Q; G( i6 U6 a$ N' n5 Q
; n4 V4 o# Y4 f! B( M3.日期和时间类
$ i& ?! l7 n7 J2 a5 v$ V) n# t9 M4 Q0 o, i. j
date) \; u2 i( [' k7 `' B
5 B- L& }* p6 o  P
用法:date+ C" a- [3 f& m. L5 O$ X
1 ]8 j" T, N% {, [( {  Y
date类型以YYYY-MM-DD格式存储数据。它允许1000-01-01到9999-12-31之间的值。
6 c. V% ?4 f8 |. F5 ^. y# V( f2 {! ?# F0 H
datetime) h8 ~% T  P* T6 L0 U1 ~

- k( u4 C. [* {3 h2 o* U% A( }; h3 r用法:datetime[null | not null][default]: G+ O8 ^$ @3 k: ?7 H3 v
2 [3 `2 G  M, F" J9 G% n- B
datetime类型以YYYY-MM-DD HH:MM:SS格式存储数据。
) y+ k: q; y4 Q$ R: {! n1 @- O7 t4 b- Y# V& a: x
timestamp- W- O0 x* e8 }: X

8 M. H' \  ]) m2 _1 w用法:timestamp(format)
, e5 U5 ^- m3 ^: Y0 z& z
5 I! b1 V5 {- L: l4 S  k% Xformat可以是2到14间的任意数字。+ c$ @3 i7 g+ |5 f, P

5 u6 A8 D% ~% X* C: [; X' G" R  r$ Z4 I下面是format数字的对照列表:
" H, Z) k0 |  ?  y# b/ a3 I7 U( U8 e
2    YY, R: M8 u  Q$ m  y# R: [( U

+ I( V- }1 Y# z; T' K4    YYMM- \. g# R4 B* }( \5 w  O: Q
3 k5 H0 b) f* ~7 F" g
6    YYMMDD/ _0 x1 _% A/ w" g
( ?5 x% u2 {; O* p5 E3 M) d
8    YYYYMMDD2 D5 X6 U$ u3 H* d+ {3 V
. Q, h5 w# u  T4 m2 N
10   YYMMDDHHMM9 B8 [( Q' }# f& C) k  \2 j

3 g& P' V9 Z7 r1 M/ |9 t12   YYMMDDHHMMSS: D/ O2 S( y, n! }8 Z8 u3 K) r) Q
) Y: |$ r" M* r( r  Q: F, b' c  V( J9 ?
14   YYYYMMDDHHMMSS
/ \) V. m7 U8 P
9 E6 Z8 }# F" x  l6 P+ n6 g0 H2 ~4 btime
+ \9 P1 ^1 _, y0 T6 w6 b' r! g* u8 E# H) ?( |: T& D0 f2 I1 |
用法:time
% J1 w, }2 Z/ i$ K5 d
0 K9 c7 u1 \5 U2 S" J以HH:MM:SS格式存储时间数据。
1 i. H2 U$ D# G& \. ^" b
( E  x5 E% Y( x: I% x4 Y2 x# ~# G) eyear
: V9 L! t  b# `1 D3 |1 |4 @" h) C  b  N
用法:year[(2 | 4)]
+ r# Y+ j2 t( ~  B8 w; q- e5 b5 ~4 v& z" R, w9 O5 V; O
用2位数字格式,允许的日期是1970到2069之间的年份。(79到99的前面加19,01到69的前面加20); b: |! T2 q: M  z

% n" @: \* i5 I9 j用4为数字格式允许1901到2155之间的值。
发新话题