/ Hex Artifact Content
Login

Artifact 7c786d2e8ff434346764534ec015966d17efce60:


0000: 23 0a 23 20 52 75 6e 20 74 68 69 73 20 73 63 72  #.# Run this scr
0010: 69 70 74 20 74 6f 20 67 65 6e 65 72 61 74 65 64  ipt to generated
0020: 20 61 20 64 61 74 61 74 79 70 65 73 2e 68 74 6d   a datatypes.htm
0030: 6c 20 6f 75 74 70 75 74 20 66 69 6c 65 0a 23 0a  l output file.#.
0040: 73 65 74 20 72 63 73 69 64 20 7b 24 49 64 3a 20  set rcsid {$Id: 
0050: 64 61 74 61 74 79 70 65 73 2e 74 63 6c 2c 76 20  datatypes.tcl,v 
0060: 31 2e 38 20 32 30 30 34 2f 31 30 2f 31 30 20 31  1.8 2004/10/10 1
0070: 37 3a 32 34 3a 35 35 20 64 72 68 20 45 78 70 20  7:24:55 drh Exp 
0080: 24 7d 0a 73 6f 75 72 63 65 20 63 6f 6d 6d 6f 6e  $}.source common
0090: 2e 74 63 6c 0a 68 65 61 64 65 72 20 7b 44 61 74  .tcl.header {Dat
00a0: 61 74 79 70 65 73 20 49 6e 20 53 51 4c 69 74 65  atypes In SQLite
00b0: 20 76 65 72 73 69 6f 6e 20 32 7d 0a 70 75 74 73   version 2}.puts
00c0: 20 7b 0a 3c 68 32 3e 44 61 74 61 74 79 70 65 73   {.<h2>Datatypes
00d0: 20 49 6e 20 53 51 4c 69 74 65 20 56 65 72 73 69   In SQLite Versi
00e0: 6f 6e 20 32 3c 2f 68 32 3e 0a 0a 3c 68 33 3e 31  on 2</h2>..<h3>1
00f0: 2e 30 20 26 6e 62 73 70 3b 20 54 79 70 65 6c 65  .0 &nbsp; Typele
0100: 73 73 6e 65 73 73 3c 2f 68 33 3e 0a 3c 70 3e 0a  ssness</h3>.<p>.
0110: 53 51 4c 69 74 65 20 69 73 20 22 74 79 70 65 6c  SQLite is "typel
0120: 65 73 73 22 2e 20 20 54 68 69 73 20 6d 65 61 6e  ess".  This mean
0130: 73 20 74 68 61 74 20 79 6f 75 20 63 61 6e 20 73  s that you can s
0140: 74 6f 72 65 20 61 6e 79 0a 6b 69 6e 64 20 6f 66  tore any.kind of
0150: 20 64 61 74 61 20 79 6f 75 20 77 61 6e 74 20 69   data you want i
0160: 6e 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20  n any column of 
0170: 61 6e 79 20 74 61 62 6c 65 2c 20 72 65 67 61 72  any table, regar
0180: 64 6c 65 73 73 20 6f 66 20 74 68 65 0a 64 65 63  dless of the.dec
0190: 6c 61 72 65 64 20 64 61 74 61 74 79 70 65 20 6f  lared datatype o
01a0: 66 20 74 68 61 74 20 63 6f 6c 75 6d 6e 2e 20 20  f that column.  
01b0: 0a 28 53 65 65 20 74 68 65 20 6f 6e 65 20 65 78  .(See the one ex
01c0: 63 65 70 74 69 6f 6e 20 74 6f 20 74 68 69 73 20  ception to this 
01d0: 72 75 6c 65 20 69 6e 20 73 65 63 74 69 6f 6e 20  rule in section 
01e0: 32 2e 30 20 62 65 6c 6f 77 2e 29 0a 54 68 69 73  2.0 below.).This
01f0: 20 62 65 68 61 76 69 6f 72 20 69 73 20 61 20 66   behavior is a f
0200: 65 61 74 75 72 65 2c 20 6e 6f 74 0a 61 20 62 75  eature, not.a bu
0210: 67 2e 20 20 41 20 64 61 74 61 62 61 73 65 20 69  g.  A database i
0220: 73 20 73 75 70 70 6f 73 65 20 74 6f 20 73 74 6f  s suppose to sto
0230: 72 65 20 61 6e 64 20 72 65 74 72 69 65 76 65 20  re and retrieve 
0240: 64 61 74 61 20 61 6e 64 20 69 74 20 0a 73 68 6f  data and it .sho
0250: 75 6c 64 20 6e 6f 74 20 6d 61 74 74 65 72 20 74  uld not matter t
0260: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  o the database w
0270: 68 61 74 20 66 6f 72 6d 61 74 20 74 68 61 74 20  hat format that 
0280: 64 61 74 61 20 69 73 20 69 6e 2e 0a 54 68 65 20  data is in..The 
0290: 73 74 72 6f 6e 67 20 74 79 70 69 6e 67 20 73 79  strong typing sy
02a0: 73 74 65 6d 20 66 6f 75 6e 64 20 69 6e 20 6d 6f  stem found in mo
02b0: 73 74 20 6f 74 68 65 72 20 53 51 4c 20 65 6e 67  st other SQL eng
02c0: 69 6e 65 73 20 61 6e 64 0a 63 6f 64 69 66 69 65  ines and.codifie
02d0: 64 20 69 6e 20 74 68 65 20 53 51 4c 20 6c 61 6e  d in the SQL lan
02e0: 67 75 61 67 65 20 73 70 65 63 20 69 73 20 61 20  guage spec is a 
02f0: 6d 69 73 66 65 61 74 75 72 65 20 2d 0a 69 74 20  misfeature -.it 
0300: 69 73 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66  is an example of
0310: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
0320: 69 6f 6e 20 73 68 6f 77 69 6e 67 20 74 68 72 6f  ion showing thro
0330: 75 67 68 20 69 6e 74 6f 20 74 68 65 0a 69 6e 74  ugh into the.int
0340: 65 72 66 61 63 65 2e 20 20 53 51 4c 69 74 65 20  erface.  SQLite 
0350: 73 65 65 6b 73 20 74 6f 20 6f 76 65 72 63 6f 6d  seeks to overcom
0360: 65 20 74 68 69 73 20 6d 69 73 66 65 61 74 75 72  e this misfeatur
0370: 65 20 62 79 20 61 6c 6c 6f 77 69 6e 67 0a 79 6f  e by allowing.yo
0380: 75 20 74 6f 20 73 74 6f 72 65 20 61 6e 79 20 6b  u to store any k
0390: 69 6e 64 20 6f 66 20 64 61 74 61 20 69 6e 74 6f  ind of data into
03a0: 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 63 6f 6c   any kind of col
03b0: 75 6d 6e 20 61 6e 64 20 62 79 0a 61 6c 6c 6f 77  umn and by.allow
03c0: 69 6e 67 20 66 6c 65 78 69 62 69 6c 69 74 79 20  ing flexibility 
03d0: 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 63 61  in the specifica
03e0: 74 69 6f 6e 20 6f 66 20 64 61 74 61 74 79 70 65  tion of datatype
03f0: 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 41 20 64  s..</p>..<p>.A d
0400: 61 74 61 74 79 70 65 20 74 6f 20 53 51 4c 69 74  atatype to SQLit
0410: 65 20 69 73 20 61 6e 79 20 73 65 71 75 65 6e 63  e is any sequenc
0420: 65 20 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  e of zero or mor
0430: 65 20 6e 61 6d 65 73 0a 6f 70 74 69 6f 6e 61 6c  e names.optional
0440: 6c 79 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  ly followed by a
0450: 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20 6c   parenthesized l
0460: 69 73 74 73 20 6f 66 20 6f 6e 65 20 6f 72 20 74  ists of one or t
0470: 77 6f 0a 73 69 67 6e 65 64 20 69 6e 74 65 67 65  wo.signed intege
0480: 72 73 2e 20 20 4e 6f 74 69 63 65 20 69 6e 20 70  rs.  Notice in p
0490: 61 72 74 69 63 75 6c 61 72 20 74 68 61 74 20 61  articular that a
04a0: 20 64 61 74 61 74 79 70 65 20 6d 61 79 0a 62 65   datatype may.be
04b0: 20 3c 65 6d 3e 7a 65 72 6f 3c 2f 65 6d 3e 20 6f   <em>zero</em> o
04c0: 72 20 6d 6f 72 65 20 6e 61 6d 65 73 2e 20 20 54  r more names.  T
04d0: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 61  hat means that a
04e0: 6e 20 65 6d 70 74 79 0a 73 74 72 69 6e 67 20 69  n empty.string i
04f0: 73 20 61 20 76 61 6c 69 64 20 64 61 74 61 74 79  s a valid dataty
0500: 70 65 20 61 73 20 66 61 72 20 61 73 20 53 51 4c  pe as far as SQL
0510: 69 74 65 20 69 73 20 63 6f 6e 63 65 72 6e 65 64  ite is concerned
0520: 2e 0a 53 6f 20 79 6f 75 20 63 61 6e 20 64 65 63  ..So you can dec
0530: 6c 61 72 65 20 74 61 62 6c 65 73 20 77 68 65 72  lare tables wher
0540: 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f  e the datatype o
0550: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 0a 69 73  f each column.is
0560: 20 6c 65 66 74 20 75 6e 73 70 65 63 69 66 69 65   left unspecifie
0570: 64 2c 20 6c 69 6b 65 20 74 68 69 73 3a 0a 3c 2f  d, like this:.</
0580: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
0590: 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
05a0: 4c 45 20 65 78 31 28 61 2c 62 2c 63 29 3b 0a 3c  LE ex1(a,b,c);.<
05b0: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
05c0: 65 3e 0a 0a 3c 70 3e 0a 45 76 65 6e 20 74 68 6f  e>..<p>.Even tho
05d0: 75 67 68 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77  ugh SQLite allow
05e0: 73 20 74 68 65 20 64 61 74 61 74 79 70 65 20 74  s the datatype t
05f0: 6f 20 62 65 20 6f 6d 69 74 74 65 64 2c 20 69 74  o be omitted, it
0600: 20 69 73 0a 73 74 69 6c 6c 20 61 20 67 6f 6f 64   is.still a good
0610: 20 69 64 65 61 20 74 6f 20 69 6e 63 6c 75 64 65   idea to include
0620: 20 69 74 20 69 6e 20 79 6f 75 72 20 43 52 45 41   it in your CREA
0630: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
0640: 6e 74 73 2c 0a 73 69 6e 63 65 20 74 68 65 20 64  nts,.since the d
0650: 61 74 61 20 74 79 70 65 20 6f 66 74 65 6e 20 73  ata type often s
0660: 65 72 76 65 73 20 61 73 20 61 20 67 6f 6f 64 20  erves as a good 
0670: 68 69 6e 74 20 74 6f 20 6f 74 68 65 72 0a 70 72  hint to other.pr
0680: 6f 67 72 61 6d 6d 65 72 73 20 61 62 6f 75 74 20  ogrammers about 
0690: 77 68 61 74 20 79 6f 75 20 69 6e 74 65 6e 64 20  what you intend 
06a0: 74 6f 20 70 75 74 20 69 6e 20 74 68 65 20 63 6f  to put in the co
06b0: 6c 75 6d 6e 2e 20 41 6e 64 0a 69 66 20 79 6f 75  lumn. And.if you
06c0: 20 65 76 65 72 20 70 6f 72 74 20 79 6f 75 72 20   ever port your 
06d0: 63 6f 64 65 20 74 6f 20 61 6e 6f 74 68 65 72 20  code to another 
06e0: 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 2c  database engine,
06f0: 20 74 68 61 74 0a 6f 74 68 65 72 20 65 6e 67 69   that.other engi
0700: 6e 65 20 77 69 6c 6c 20 70 72 6f 62 61 62 6c 79  ne will probably
0710: 20 72 65 71 75 69 72 65 20 61 20 64 61 74 61 74   require a datat
0720: 79 70 65 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64  ype of some kind
0730: 2e 0a 53 51 4c 69 74 65 20 61 63 63 65 70 74 73  ..SQLite accepts
0740: 20 61 6c 6c 20 74 68 65 20 75 73 75 61 6c 20 64   all the usual d
0750: 61 74 61 74 79 70 65 73 2e 20 20 46 6f 72 20 65  atatypes.  For e
0760: 78 61 6d 70 6c 65 3a 0a 3c 2f 70 3e 0a 0a 3c 62  xample:.</p>..<b
0770: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
0780: 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 32  CREATE TABLE ex2
0790: 28 0a 20 20 61 20 56 41 52 43 48 41 52 28 31 30  (.  a VARCHAR(10
07a0: 29 2c 0a 20 20 62 20 4e 56 41 52 43 48 41 52 28  ),.  b NVARCHAR(
07b0: 31 35 29 2c 0a 20 20 63 20 54 45 58 54 2c 0a 20  15),.  c TEXT,. 
07c0: 20 64 20 49 4e 54 45 47 45 52 2c 0a 20 20 65 20   d INTEGER,.  e 
07d0: 46 4c 4f 41 54 2c 0a 20 20 66 20 42 4f 4f 4c 45  FLOAT,.  f BOOLE
07e0: 41 4e 2c 0a 20 20 67 20 43 4c 4f 42 2c 0a 20 20  AN,.  g CLOB,.  
07f0: 68 20 42 4c 4f 42 2c 0a 20 20 69 20 54 49 4d 45  h BLOB,.  i TIME
0800: 53 54 41 4d 50 2c 0a 20 20 6a 20 4e 55 4d 45 52  STAMP,.  j NUMER
0810: 49 43 28 31 30 2c 35 29 0a 20 20 6b 20 56 41 52  IC(10,5).  k VAR
0820: 59 49 4e 47 20 43 48 41 52 41 43 54 45 52 20 28  YING CHARACTER (
0830: 32 34 29 2c 0a 20 20 6c 20 4e 41 54 49 4f 4e 41  24),.  l NATIONA
0840: 4c 20 56 41 52 59 49 4e 47 20 43 48 41 52 41 43  L VARYING CHARAC
0850: 54 45 52 28 31 36 29 0a 29 3b 0a 3c 2f 70 72 65  TER(16).);.</pre
0860: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
0870: 3c 70 3e 0a 41 6e 64 20 73 6f 20 66 6f 72 74 68  <p>.And so forth
0880: 2e 20 20 42 61 73 69 63 61 6c 6c 79 20 61 6e 79  .  Basically any
0890: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 6e 61 6d   sequence of nam
08a0: 65 73 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 66 6f  es optionally fo
08b0: 6c 6c 6f 77 65 64 20 62 79 20 0a 6f 6e 65 20 6f  llowed by .one o
08c0: 72 20 74 77 6f 20 73 69 67 6e 65 64 20 69 6e 74  r two signed int
08d0: 65 67 65 72 73 20 69 6e 20 70 61 72 65 6e 74 68  egers in parenth
08e0: 65 73 65 73 20 77 69 6c 6c 20 64 6f 2e 0a 3c 2f  eses will do..</
08f0: 70 3e 0a 0a 3c 68 33 3e 32 2e 30 20 26 6e 62 73  p>..<h3>2.0 &nbs
0900: 70 3b 20 54 68 65 20 49 4e 54 45 47 45 52 20 50  p; The INTEGER P
0910: 52 49 4d 41 52 59 20 4b 45 59 3c 2f 68 33 3e 0a  RIMARY KEY</h3>.
0920: 0a 3c 70 3e 0a 4f 6e 65 20 65 78 63 65 70 74 69  .<p>.One excepti
0930: 6f 6e 20 74 6f 20 74 68 65 20 74 79 70 65 6c 65  on to the typele
0940: 73 73 6e 65 73 73 20 6f 66 20 53 51 4c 69 74 65  ssness of SQLite
0950: 20 69 73 20 61 20 63 6f 6c 75 6d 6e 20 77 68 6f   is a column who
0960: 73 65 20 74 79 70 65 0a 69 73 20 49 4e 54 45 47  se type.is INTEG
0970: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20  ER PRIMARY KEY. 
0980: 20 28 41 6e 64 20 79 6f 75 20 6d 75 73 74 20 75   (And you must u
0990: 73 65 20 22 49 4e 54 45 47 45 52 22 20 6e 6f 74  se "INTEGER" not
09a0: 20 22 49 4e 54 22 2e 0a 41 20 63 6f 6c 75 6d 6e   "INT"..A column
09b0: 20 6f 66 20 74 79 70 65 20 49 4e 54 20 50 52 49   of type INT PRI
09c0: 4d 41 52 59 20 4b 45 59 20 69 73 20 74 79 70 65  MARY KEY is type
09d0: 6c 65 73 73 20 6a 75 73 74 20 6c 69 6b 65 20 61  less just like a
09e0: 6e 79 20 6f 74 68 65 72 2e 29 0a 49 4e 54 45 47  ny other.).INTEG
09f0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  ER PRIMARY KEY c
0a00: 6f 6c 75 6d 6e 73 20 6d 75 73 74 20 63 6f 6e 74  olumns must cont
0a10: 61 69 6e 20 61 20 33 32 2d 62 69 74 20 73 69 67  ain a 32-bit sig
0a20: 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 41 6e  ned integer.  An
0a30: 79 0a 61 74 74 65 6d 70 74 20 74 6f 20 69 6e 73  y.attempt to ins
0a40: 65 72 74 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20  ert non-integer 
0a50: 64 61 74 61 20 77 69 6c 6c 20 72 65 73 75 6c 74  data will result
0a60: 20 69 6e 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 2f   in an error..</
0a70: 70 3e 0a 0a 3c 70 3e 0a 49 4e 54 45 47 45 52 20  p>..<p>.INTEGER 
0a80: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
0a90: 6d 6e 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  mns can be used 
0aa0: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
0ab0: 20 65 71 75 69 76 61 6c 65 6e 74 0a 6f 66 20 41   equivalent.of A
0ac0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20 49  UTOINCREMENT.  I
0ad0: 66 20 79 6f 75 20 74 72 79 20 74 6f 20 69 6e 73  f you try to ins
0ae0: 65 72 74 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ert a NULL into 
0af0: 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  an INTEGER PRIMA
0b00: 52 59 0a 4b 45 59 20 63 6f 6c 75 6d 6e 2c 20 74  RY.KEY column, t
0b10: 68 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 61  he column will a
0b20: 63 74 75 61 6c 6c 79 20 62 65 20 66 69 6c 6c 65  ctually be fille
0b30: 64 20 77 69 74 68 20 61 20 69 6e 74 65 67 65 72  d with a integer
0b40: 20 74 68 61 74 20 69 73 0a 6f 6e 65 20 67 72 65   that is.one gre
0b50: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6c 61  ater than the la
0b60: 72 67 65 73 74 20 6b 65 79 20 61 6c 72 65 61 64  rgest key alread
0b70: 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  y in the table. 
0b80: 20 4f 72 20 69 66 20 74 68 65 0a 6c 61 72 67 65   Or if the.large
0b90: 73 74 20 6b 65 79 20 69 73 20 32 31 34 37 34 38  st key is 214748
0ba0: 33 36 34 37 2c 20 74 68 65 6e 20 74 68 65 20 63  3647, then the c
0bb0: 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 20 66 69  olumn will be fi
0bc0: 6c 6c 65 64 20 77 69 74 68 20 61 0a 72 61 6e 64  lled with a.rand
0bd0: 6f 6d 20 69 6e 74 65 67 65 72 2e 20 20 45 69 74  om integer.  Eit
0be0: 68 65 72 20 77 61 79 2c 20 74 68 65 20 49 4e 54  her way, the INT
0bf0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
0c00: 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 0a   column will be.
0c10: 61 73 73 69 67 6e 65 64 20 61 20 75 6e 69 71 75  assigned a uniqu
0c20: 65 20 69 6e 74 65 67 65 72 2e 20 20 59 6f 75 20  e integer.  You 
0c30: 63 61 6e 20 72 65 74 72 69 65 76 65 20 74 68 69  can retrieve thi
0c40: 73 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 0a  s integer using.
0c50: 74 68 65 20 3c 62 3e 73 71 6c 69 74 65 5f 6c 61  the <b>sqlite_la
0c60: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
0c70: 29 3c 2f 62 3e 20 41 50 49 20 66 75 6e 63 74 69  )</b> API functi
0c80: 6f 6e 20 6f 72 20 75 73 69 6e 67 20 74 68 65 0a  on or using the.
0c90: 3c 62 3e 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  <b>last_insert_r
0ca0: 6f 77 69 64 28 29 3c 2f 62 3e 20 53 51 4c 20 66  owid()</b> SQL f
0cb0: 75 6e 63 74 69 6f 6e 20 69 6e 20 61 20 73 75 62  unction in a sub
0cc0: 73 65 71 75 65 6e 74 20 53 45 4c 45 43 54 20 73  sequent SELECT s
0cd0: 74 61 74 65 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a  tatement..</p>..
0ce0: 3c 68 33 3e 33 2e 30 20 26 6e 62 73 70 3b 20 43  <h3>3.0 &nbsp; C
0cf0: 6f 6d 70 61 72 69 73 6f 6e 20 61 6e 64 20 53 6f  omparison and So
0d00: 72 74 20 4f 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c  rt Order</h3>..<
0d10: 70 3e 0a 53 51 4c 69 74 65 20 69 73 20 74 79 70  p>.SQLite is typ
0d20: 65 6c 65 73 73 20 66 6f 72 20 74 68 65 20 70 75  eless for the pu
0d30: 72 70 6f 73 65 20 6f 66 20 64 65 63 69 64 69 6e  rpose of decidin
0d40: 67 20 77 68 61 74 20 64 61 74 61 20 69 73 20 61  g what data is a
0d50: 6c 6c 6f 77 65 64 0a 74 6f 20 62 65 20 73 74 6f  llowed.to be sto
0d60: 72 65 64 20 69 6e 20 61 20 63 6f 6c 75 6d 6e 2e  red in a column.
0d70: 20 20 42 75 74 20 73 6f 6d 65 20 6e 6f 74 69 6f    But some notio
0d80: 6e 20 6f 66 20 74 79 70 65 20 63 6f 6d 65 73 20  n of type comes 
0d90: 69 6e 74 6f 20 70 6c 61 79 0a 77 68 65 6e 20 73  into play.when s
0da0: 6f 72 74 69 6e 67 20 61 6e 64 20 63 6f 6d 70 61  orting and compa
0db0: 72 69 6e 67 20 64 61 74 61 2e 20 20 46 6f 72 20  ring data.  For 
0dc0: 74 68 65 73 65 20 70 75 72 70 6f 73 65 73 2c 20  these purposes, 
0dd0: 61 20 63 6f 6c 75 6d 6e 20 6f 72 0a 61 6e 20 65  a column or.an e
0de0: 78 70 72 65 73 73 69 6f 6e 20 63 61 6e 20 62 65  xpression can be
0df0: 20 6f 6e 65 20 6f 66 20 74 77 6f 20 74 79 70 65   one of two type
0e00: 73 3a 20 3c 62 3e 6e 75 6d 65 72 69 63 3c 2f 62  s: <b>numeric</b
0e10: 3e 20 61 6e 64 20 3c 62 3e 74 65 78 74 3c 2f 62  > and <b>text</b
0e20: 3e 2e 0a 54 68 65 20 73 6f 72 74 20 6f 72 20 63  >..The sort or c
0e30: 6f 6d 70 61 72 69 73 6f 6e 20 6d 61 79 20 67 69  omparison may gi
0e40: 76 65 20 64 69 66 66 65 72 65 6e 74 20 72 65 73  ve different res
0e50: 75 6c 74 73 20 64 65 70 65 6e 64 69 6e 67 20 6f  ults depending o
0e60: 6e 20 77 68 69 63 68 0a 74 79 70 65 20 6f 66 20  n which.type of 
0e70: 64 61 74 61 20 69 73 20 62 65 69 6e 67 20 73 6f  data is being so
0e80: 72 74 65 64 20 6f 72 20 63 6f 6d 70 61 72 65 64  rted or compared
0e90: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 66 20 64  ..</p>..<p>.If d
0ea0: 61 74 61 20 69 73 20 6f 66 20 74 79 70 65 20 3c  ata is of type <
0eb0: 62 3e 74 65 78 74 3c 2f 62 3e 20 74 68 65 6e 20  b>text</b> then 
0ec0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  the comparison i
0ed0: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 0a  s determined by.
0ee0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 64  the standard C d
0ef0: 61 74 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  ata comparison f
0f00: 75 6e 63 74 69 6f 6e 73 20 3c 62 3e 6d 65 6d 63  unctions <b>memc
0f10: 6d 70 28 29 3c 2f 62 3e 20 6f 72 0a 3c 62 3e 73  mp()</b> or.<b>s
0f20: 74 72 63 6d 70 28 29 3c 2f 62 3e 2e 20 20 54 68  trcmp()</b>.  Th
0f30: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6c 6f 6f  e comparison loo
0f40: 6b 73 20 61 74 20 62 79 74 65 73 20 66 72 6f 6d  ks at bytes from
0f50: 20 74 77 6f 20 69 6e 70 75 74 73 20 6f 6e 65 0a   two inputs one.
0f60: 62 79 20 6f 6e 65 20 61 6e 64 20 72 65 74 75 72  by one and retur
0f70: 6e 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e  ns the first non
0f80: 2d 7a 65 72 6f 20 64 69 66 66 65 72 65 6e 63 65  -zero difference
0f90: 2e 0a 53 74 72 69 6e 67 73 20 61 72 65 20 27 5c  ..Strings are '\
0fa0: 30 30 30 27 20 74 65 72 6d 69 6e 61 74 65 64 20  000' terminated 
0fb0: 73 6f 20 73 68 6f 72 74 65 72 0a 73 74 72 69 6e  so shorter.strin
0fc0: 67 73 20 73 6f 72 74 20 62 65 66 6f 72 65 20 6c  gs sort before l
0fd0: 6f 6e 67 65 72 20 73 74 72 69 6e 67 73 2c 20 61  onger strings, a
0fe0: 73 20 79 6f 75 20 77 6f 75 6c 64 20 65 78 70 65  s you would expe
0ff0: 63 74 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f  ct..</p>..<p>.Fo
1000: 72 20 6e 75 6d 65 72 69 63 20 64 61 74 61 2c 20  r numeric data, 
1010: 74 68 69 73 20 73 69 74 75 61 74 69 6f 6e 20 69  this situation i
1020: 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 65 78 2e 20  s more complex. 
1030: 20 49 66 20 62 6f 74 68 20 69 6e 70 75 74 73 0a   If both inputs.
1040: 6c 6f 6f 6b 20 6c 69 6b 65 20 77 65 6c 6c 2d 66  look like well-f
1050: 6f 72 6d 65 64 20 6e 75 6d 62 65 72 73 2c 20 74  ormed numbers, t
1060: 68 65 6e 20 74 68 65 79 20 61 72 65 20 63 6f 6e  hen they are con
1070: 76 65 72 74 65 64 0a 69 6e 74 6f 20 66 6c 6f 61  verted.into floa
1080: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
1090: 73 20 75 73 69 6e 67 20 3c 62 3e 61 74 6f 66 28  s using <b>atof(
10a0: 29 3c 2f 62 3e 20 61 6e 64 20 63 6f 6d 70 61 72  )</b> and compar
10b0: 65 64 20 6e 75 6d 65 72 69 63 61 6c 6c 79 2e 0a  ed numerically..
10c0: 49 66 20 6f 6e 65 20 69 6e 70 75 74 20 69 73 20  If one input is 
10d0: 6e 6f 74 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  not a well-forme
10e0: 64 20 6e 75 6d 62 65 72 20 62 75 74 20 74 68 65  d number but the
10f0: 20 6f 74 68 65 72 20 69 73 2c 20 74 68 65 6e 20   other is, then 
1100: 74 68 65 0a 6e 75 6d 62 65 72 20 69 73 20 63 6f  the.number is co
1110: 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 6c  nsidered to be l
1120: 65 73 73 20 74 68 61 6e 20 74 68 65 20 6e 6f 6e  ess than the non
1130: 2d 6e 75 6d 62 65 72 2e 20 20 49 66 20 6e 65 69  -number.  If nei
1140: 74 68 65 72 20 69 6e 70 75 74 73 0a 69 73 20 61  ther inputs.is a
1150: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 6e 75 6d   well-formed num
1160: 62 65 72 2c 20 74 68 65 6e 20 3c 62 3e 73 74 72  ber, then <b>str
1170: 63 6d 70 28 29 3c 2f 62 3e 20 69 73 20 75 73 65  cmp()</b> is use
1180: 64 20 74 6f 20 64 6f 20 74 68 65 0a 63 6f 6d 70  d to do the.comp
1190: 61 72 69 73 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70  arison..</p>..<p
11a0: 3e 0a 44 6f 20 6e 6f 74 20 62 65 20 63 6f 6e 66  >.Do not be conf
11b0: 75 73 65 64 20 62 79 20 74 68 65 20 66 61 63 74  used by the fact
11c0: 20 74 68 61 74 20 61 20 63 6f 6c 75 6d 6e 20 6d   that a column m
11d0: 69 67 68 74 20 68 61 76 65 20 61 20 22 6e 75 6d  ight have a "num
11e0: 65 72 69 63 22 0a 64 61 74 61 74 79 70 65 2e 20  eric".datatype. 
11f0: 20 54 68 69 73 20 64 6f 65 73 20 6e 6f 74 20 6d   This does not m
1200: 65 61 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6c  ean that the col
1210: 75 6d 6e 20 63 61 6e 20 63 6f 6e 74 61 69 6e 20  umn can contain 
1220: 6f 6e 6c 79 20 6e 75 6d 62 65 72 73 2e 0a 49 74  only numbers..It
1230: 20 6d 65 72 65 6c 79 20 6d 65 61 6e 73 20 74 68   merely means th
1240: 61 74 20 69 66 20 74 68 65 20 63 6f 6c 75 6d 6e  at if the column
1250: 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
1260: 6e 75 6d 62 65 72 2c 20 74 68 61 74 20 6e 75 6d  number, that num
1270: 62 65 72 0a 77 69 6c 6c 20 73 6f 72 74 20 69 6e  ber.will sort in
1280: 20 6e 75 6d 65 72 69 63 61 6c 20 6f 72 64 65 72   numerical order
1290: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72 20  ..</p>..<p>.For 
12a0: 62 6f 74 68 20 74 65 78 74 20 61 6e 64 20 6e 75  both text and nu
12b0: 6d 65 72 69 63 20 76 61 6c 75 65 73 2c 20 4e 55  meric values, NU
12c0: 4c 4c 20 73 6f 72 74 73 20 62 65 66 6f 72 65 20  LL sorts before 
12d0: 61 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  any other value.
12e0: 0a 41 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  .A comparison of
12f0: 20 61 6e 79 20 76 61 6c 75 65 20 61 67 61 69 6e   any value again
1300: 73 74 20 4e 55 4c 4c 20 75 73 69 6e 67 20 6f 70  st NULL using op
1310: 65 72 61 74 6f 72 73 20 6c 69 6b 65 20 22 26 6c  erators like "&l
1320: 74 3b 22 20 6f 72 0a 22 26 67 74 3b 3d 22 20 69  t;" or."&gt;=" i
1330: 73 20 61 6c 77 61 79 73 20 66 61 6c 73 65 2e 0a  s always false..
1340: 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 30 20 26 6e  </p>..<h3>4.0 &n
1350: 62 73 70 3b 20 48 6f 77 20 53 51 4c 69 74 65 20  bsp; How SQLite 
1360: 44 65 74 65 72 6d 69 6e 65 73 20 44 61 74 61 74  Determines Datat
1370: 79 70 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 0a 46  ypes</h3>..<p>.F
1380: 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  or SQLite versio
1390: 6e 20 32 2e 36 2e 33 20 61 6e 64 20 65 61 72 6c  n 2.6.3 and earl
13a0: 69 65 72 2c 20 61 6c 6c 20 76 61 6c 75 65 73 20  ier, all values 
13b0: 75 73 65 64 20 74 68 65 20 6e 75 6d 65 72 69 63  used the numeric
13c0: 20 64 61 74 61 74 79 70 65 2e 0a 54 68 65 20 74   datatype..The t
13d0: 65 78 74 20 64 61 74 61 74 79 70 65 20 61 70 70  ext datatype app
13e0: 65 61 72 73 20 69 6e 20 76 65 72 73 69 6f 6e 20  ears in version 
13f0: 32 2e 37 2e 30 20 61 6e 64 20 6c 61 74 65 72 2e  2.7.0 and later.
1400: 20 20 49 6e 20 74 68 65 20 73 65 71 75 65 6c 20    In the sequel 
1410: 69 74 0a 69 73 20 61 73 73 75 6d 65 64 20 74 68  it.is assumed th
1420: 61 74 20 79 6f 75 20 61 72 65 20 75 73 69 6e 67  at you are using
1430: 20 76 65 72 73 69 6f 6e 20 32 2e 37 2e 30 20 6f   version 2.7.0 o
1440: 72 20 6c 61 74 65 72 20 6f 66 20 53 51 4c 69 74  r later of SQLit
1450: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 46 6f 72  e..</p>..<p>.For
1460: 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2c 20   an expression, 
1470: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
1480: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6f 66  the result is of
1490: 74 65 6e 20 64 65 74 65 72 6d 69 6e 65 64 20 62  ten determined b
14a0: 79 0a 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  y.the outermost 
14b0: 6f 70 65 72 61 74 6f 72 2e 20 20 46 6f 72 20 65  operator.  For e
14c0: 78 61 6d 70 6c 65 2c 20 61 72 69 74 68 6d 65 74  xample, arithmet
14d0: 69 63 20 6f 70 65 72 61 74 6f 72 73 20 28 22 2b  ic operators ("+
14e0: 22 2c 20 22 2a 22 2c 20 22 25 22 29 0a 61 6c 77  ", "*", "%").alw
14f0: 61 79 73 20 72 65 74 75 72 6e 20 61 20 6e 75 6d  ays return a num
1500: 65 72 69 63 20 72 65 73 75 6c 74 73 2e 20 20 54  eric results.  T
1510: 68 65 20 73 74 72 69 6e 67 20 63 6f 6e 63 61 74  he string concat
1520: 65 6e 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72  enation operator
1530: 0a 28 22 7c 7c 22 29 20 72 65 74 75 72 6e 73 20  .("||") returns 
1540: 61 20 74 65 78 74 20 72 65 73 75 6c 74 2e 20 20  a text result.  
1550: 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 49  And so forth.  I
1560: 66 20 79 6f 75 20 61 72 65 20 65 76 65 72 20 69  f you are ever i
1570: 6e 20 64 6f 75 62 74 0a 61 62 6f 75 74 20 74 68  n doubt.about th
1580: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 61 6e  e datatype of an
1590: 20 65 78 70 72 65 73 73 69 6f 6e 20 79 6f 75 20   expression you 
15a0: 63 61 6e 20 75 73 65 20 74 68 65 20 73 70 65 63  can use the spec
15b0: 69 61 6c 20 3c 62 3e 74 79 70 65 6f 66 28 29 3c  ial <b>typeof()<
15c0: 2f 62 3e 0a 53 51 4c 20 66 75 6e 63 74 69 6f 6e  /b>.SQL function
15d0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
15e0: 61 74 20 74 68 65 20 64 61 74 61 74 79 70 65 20  at the datatype 
15f0: 69 73 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  is.  For example
1600: 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  :.</p>..<blockqu
1610: 6f 74 65 3e 3c 70 72 65 3e 0a 73 71 6c 69 74 65  ote><pre>.sqlite
1620: 26 67 74 3b 20 53 45 4c 45 43 54 20 74 79 70 65  &gt; SELECT type
1630: 6f 66 28 27 61 62 63 27 2b 31 32 33 29 3b 0a 6e  of('abc'+123);.n
1640: 75 6d 65 72 69 63 0a 73 71 6c 69 74 65 26 67 74  umeric.sqlite&gt
1650: 3b 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28  ; SELECT typeof(
1660: 27 61 62 63 27 7c 7c 31 32 33 29 3b 0a 74 65 78  'abc'||123);.tex
1670: 74 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  t.</pre></blockq
1680: 75 6f 74 65 3e 0a 0a 3c 70 3e 0a 46 6f 72 20 74  uote>..<p>.For t
1690: 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 2c 20 74 68  able columns, th
16a0: 65 20 64 61 74 61 74 79 70 65 20 69 73 20 64 65  e datatype is de
16b0: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
16c0: 74 79 70 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  type declaration
16d0: 0a 6f 66 20 74 68 65 20 43 52 45 41 54 45 20 54  .of the CREATE T
16e0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  ABLE statement. 
16f0: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 69 73   The datatype is
1700: 20 74 65 78 74 20 69 66 20 61 6e 64 20 6f 6e 6c   text if and onl
1710: 79 20 69 66 0a 74 68 65 20 74 79 70 65 20 64 65  y if.the type de
1720: 63 6c 61 72 61 74 69 6f 6e 20 63 6f 6e 74 61 69  claration contai
1730: 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f  ns one or more o
1740: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1750: 73 74 72 69 6e 67 73 3a 0a 3c 2f 70 3e 0a 0a 3c  strings:.</p>..<
1760: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 42 4c 4f 42  blockquote>.BLOB
1770: 3c 62 72 3e 0a 43 48 41 52 3c 62 72 3e 0a 43 4c  <br>.CHAR<br>.CL
1780: 4f 42 3c 2f 62 72 3e 0a 54 45 58 54 0a 3c 2f 62  OB</br>.TEXT.</b
1790: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a  lockquote>..<p>.
17a0: 54 68 65 20 73 65 61 72 63 68 20 66 6f 72 20 74  The search for t
17b0: 68 65 73 65 20 73 74 72 69 6e 67 73 20 69 6e 20  hese strings in 
17c0: 74 68 65 20 74 79 70 65 20 64 65 63 6c 61 72 61  the type declara
17d0: 74 69 6f 6e 20 69 73 20 63 61 73 65 20 69 6e 73  tion is case ins
17e0: 65 6e 73 69 74 69 76 65 2c 0a 6f 66 20 63 6f 75  ensitive,.of cou
17f0: 72 73 65 2e 20 20 49 66 20 61 6e 79 20 6f 66 20  rse.  If any of 
1800: 74 68 65 20 61 62 6f 76 65 20 73 74 72 69 6e 67  the above string
1810: 73 20 6f 63 63 75 72 20 61 6e 79 77 68 65 72 65  s occur anywhere
1820: 20 69 6e 20 74 68 65 20 74 79 70 65 0a 64 65 63   in the type.dec
1830: 6c 61 72 61 74 69 6f 6e 2c 20 74 68 65 6e 20 74  laration, then t
1840: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
1850: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 74 65 78  he column is tex
1860: 74 2e 20 20 4e 6f 74 69 63 65 20 74 68 61 74 0a  t.  Notice that.
1870: 74 68 65 20 74 79 70 65 20 22 56 41 52 43 48 41  the type "VARCHA
1880: 52 22 20 63 6f 6e 74 61 69 6e 73 20 22 43 48 41  R" contains "CHA
1890: 52 22 20 61 73 20 61 20 73 75 62 73 74 72 69 6e  R" as a substrin
18a0: 67 20 73 6f 20 69 74 20 69 73 20 63 6f 6e 73 69  g so it is consi
18b0: 64 65 72 65 64 0a 74 65 78 74 2e 3c 2f 70 3e 0a  dered.text.</p>.
18c0: 0a 3c 70 3e 49 66 20 6e 6f 6e 65 20 6f 66 20 74  .<p>If none of t
18d0: 68 65 20 73 74 72 69 6e 67 73 20 61 62 6f 76 65  he strings above
18e0: 20 6f 63 63 75 72 20 61 6e 79 77 68 65 72 65 20   occur anywhere 
18f0: 69 6e 20 74 68 65 20 74 79 70 65 20 64 65 63 6c  in the type decl
1900: 61 72 61 74 69 6f 6e 2c 0a 74 68 65 6e 20 74 68  aration,.then th
1910: 65 20 64 61 74 61 74 79 70 65 20 69 73 20 6e 75  e datatype is nu
1920: 6d 65 72 69 63 2e 20 20 4e 6f 74 65 20 69 6e 20  meric.  Note in 
1930: 70 61 72 74 69 63 75 6c 61 72 20 74 68 61 74 20  particular that 
1940: 74 68 65 20 64 61 74 61 74 79 70 65 20 66 6f 72  the datatype for
1950: 20 63 6f 6c 75 6d 6e 73 0a 77 69 74 68 20 61 6e   columns.with an
1960: 20 65 6d 70 74 79 20 74 79 70 65 20 64 65 63 6c   empty type decl
1970: 61 72 61 74 69 6f 6e 20 69 73 20 6e 75 6d 65 72  aration is numer
1980: 69 63 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 35 2e  ic..</p>..<h3>5.
1990: 30 20 26 6e 62 73 70 3b 20 45 78 61 6d 70 6c 65  0 &nbsp; Example
19a0: 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 0a 43 6f 6e 73  s</h3>..<p>.Cons
19b0: 69 64 65 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ider the followi
19c0: 6e 67 20 74 77 6f 20 63 6f 6d 6d 61 6e 64 20 73  ng two command s
19d0: 65 71 75 65 6e 63 65 73 3a 0a 3c 2f 70 3e 0a 0a  equences:.</p>..
19e0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
19f0: 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  >.CREATE TABLE t
1a00: 31 28 61 20 49 4e 54 45 47 45 52 20 55 4e 49 51  1(a INTEGER UNIQ
1a10: 55 45 29 3b 20 20 20 20 20 20 20 20 43 52 45 41  UE);        CREA
1a20: 54 45 20 54 41 42 4c 45 20 74 32 28 62 20 54 45  TE TABLE t2(b TE
1a30: 58 54 20 55 4e 49 51 55 45 29 3b 0a 49 4e 53 45  XT UNIQUE);.INSE
1a40: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1a50: 53 28 27 30 27 29 3b 20 20 20 20 20 20 20 20 20  S('0');         
1a60: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
1a70: 4f 20 74 32 20 56 41 4c 55 45 53 28 30 29 3b 0a  O t2 VALUES(0);.
1a80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1a90: 41 4c 55 45 53 28 27 30 2e 30 27 29 3b 20 20 20  ALUES('0.0');   
1aa0: 20 20 20 20 20 20 20 20 20 20 49 4e 53 45 52 54            INSERT
1ab0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
1ac0: 30 2e 30 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  0.0);.</pre></bl
1ad0: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 49 6e  ockquote>..<p>In
1ae0: 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 6e   the sequence on
1af0: 20 74 68 65 20 6c 65 66 74 2c 20 74 68 65 20 73   the left, the s
1b00: 65 63 6f 6e 64 20 69 6e 73 65 72 74 20 77 69 6c  econd insert wil
1b10: 6c 20 66 61 69 6c 2e 20 20 49 6e 20 74 68 69 73  l fail.  In this
1b20: 20 63 61 73 65 2c 0a 74 68 65 20 73 74 72 69 6e   case,.the strin
1b30: 67 73 20 27 30 27 20 61 6e 64 20 27 30 2e 30 27  gs '0' and '0.0'
1b40: 20 61 72 65 20 74 72 65 61 74 65 64 20 61 73 20   are treated as 
1b50: 6e 75 6d 62 65 72 73 20 73 69 6e 63 65 20 74 68  numbers since th
1b60: 65 79 20 61 72 65 20 62 65 69 6e 67 20 0a 69 6e  ey are being .in
1b70: 73 65 72 74 65 64 20 69 6e 74 6f 20 61 20 6e 75  serted into a nu
1b80: 6d 65 72 69 63 20 63 6f 6c 75 6d 6e 20 62 75 74  meric column but
1b90: 20 30 3d 3d 30 2e 30 20 77 68 69 63 68 20 76 69   0==0.0 which vi
1ba0: 6f 6c 61 74 65 73 20 74 68 65 20 75 6e 69 71 75  olates the uniqu
1bb0: 65 6e 65 73 73 0a 63 6f 6e 73 74 72 61 69 6e 74  eness.constraint
1bc0: 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20  .  However, the 
1bd0: 73 65 63 6f 6e 64 20 69 6e 73 65 72 74 20 69 6e  second insert in
1be0: 20 74 68 65 20 72 69 67 68 74 2d 68 61 6e 64 20   the right-hand 
1bf0: 73 65 71 75 65 6e 63 65 20 77 6f 72 6b 73 2e 20  sequence works. 
1c00: 20 49 6e 0a 74 68 69 73 20 63 61 73 65 2c 20 74   In.this case, t
1c10: 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 30 20 61  he constants 0 a
1c20: 6e 64 20 30 2e 30 20 61 72 65 20 74 72 65 61 74  nd 0.0 are treat
1c30: 65 64 20 61 20 73 74 72 69 6e 67 73 20 77 68 69  ed a strings whi
1c40: 63 68 20 6d 65 61 6e 73 20 74 68 61 74 0a 74 68  ch means that.th
1c50: 65 79 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e  ey are distinct.
1c60: 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20  </p>..<p>SQLite 
1c70: 61 6c 77 61 79 73 20 63 6f 6e 76 65 72 74 73 20  always converts 
1c80: 6e 75 6d 62 65 72 73 20 69 6e 74 6f 20 64 6f 75  numbers into dou
1c90: 62 6c 65 2d 70 72 65 63 69 73 69 6f 6e 20 28 36  ble-precision (6
1ca0: 34 2d 62 69 74 29 20 66 6c 6f 61 74 73 0a 66 6f  4-bit) floats.fo
1cb0: 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 70 75 72  r comparison pur
1cc0: 70 6f 73 65 73 2e 20 20 54 68 69 73 20 6d 65 61  poses.  This mea
1cd0: 6e 73 20 74 68 61 74 20 61 20 6c 6f 6e 67 20 73  ns that a long s
1ce0: 65 71 75 65 6e 63 65 20 6f 66 20 64 69 67 69 74  equence of digit
1cf0: 73 20 74 68 61 74 0a 64 69 66 66 65 72 20 6f 6e  s that.differ on
1d00: 6c 79 20 69 6e 20 69 6e 73 69 67 6e 69 66 69 63  ly in insignific
1d10: 61 6e 74 20 64 69 67 69 74 73 20 77 69 6c 6c 20  ant digits will 
1d20: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 69 66  compare equal if
1d30: 20 74 68 65 79 0a 61 72 65 20 69 6e 20 61 20 6e   they.are in a n
1d40: 75 6d 65 72 69 63 20 63 6f 6c 75 6d 6e 20 62 75  umeric column bu
1d50: 74 20 77 69 6c 6c 20 63 6f 6d 70 61 72 65 20 75  t will compare u
1d60: 6e 65 71 75 61 6c 20 69 66 20 74 68 65 79 20 61  nequal if they a
1d70: 72 65 20 69 6e 20 61 20 74 65 78 74 0a 63 6f 6c  re in a text.col
1d80: 75 6d 6e 2e 20 20 57 65 20 68 61 76 65 3a 3c 2f  umn.  We have:</
1d90: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
1da0: 3c 70 72 65 3e 0a 49 4e 53 45 52 54 20 49 4e 54  <pre>.INSERT INT
1db0: 4f 20 74 31 20 20 20 20 20 20 20 20 20 20 20 20  O t1            
1dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 0a 20  INSERT INTO t2. 
1de0: 20 20 56 41 4c 55 45 53 28 27 31 32 33 34 35 36    VALUES('123456
1df0: 37 38 39 30 31 32 33 34 35 36 37 38 39 30 27 29  78901234567890')
1e00: 3b 20 20 20 20 20 20 20 20 20 20 20 56 41 4c 55  ;           VALU
1e10: 45 53 28 31 32 33 34 35 36 37 38 39 30 31 32 33  ES(1234567890123
1e20: 34 35 36 37 38 39 30 29 3b 0a 49 4e 53 45 52 54  4567890);.INSERT
1e30: 20 49 4e 54 4f 20 74 31 20 20 20 20 20 20 20 20   INTO t1        
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e50: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1e60: 74 32 0a 20 20 20 56 41 4c 55 45 53 28 27 31 32  t2.   VALUES('12
1e70: 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38  3456789012345678
1e80: 39 31 27 29 3b 20 20 20 20 20 20 20 20 20 20 20  91');           
1e90: 56 41 4c 55 45 53 28 31 32 33 34 35 36 37 38 39  VALUES(123456789
1ea0: 30 31 32 33 34 35 36 37 38 39 31 29 3b 0a 3c 2f  01234567891);.</
1eb0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
1ec0: 3e 0a 0a 3c 70 3e 41 73 20 62 65 66 6f 72 65 2c  >..<p>As before,
1ed0: 20 74 68 65 20 73 65 63 6f 6e 64 20 69 6e 73 65   the second inse
1ee0: 72 74 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 77  rt on the left w
1ef0: 69 6c 6c 20 66 61 69 6c 20 62 65 63 61 75 73 65  ill fail because
1f00: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a   the comparison.
1f10: 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20 62 6f 74  will convert bot
1f20: 68 20 73 74 72 69 6e 67 73 20 69 6e 74 6f 20 66  h strings into f
1f30: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75  loating-point nu
1f40: 6d 62 65 72 20 66 69 72 73 74 20 61 6e 64 20 74  mber first and t
1f50: 68 65 20 6f 6e 6c 79 0a 64 69 66 66 65 72 65 6e  he only.differen
1f60: 63 65 20 69 6e 20 74 68 65 20 73 74 72 69 6e 67  ce in the string
1f70: 73 20 69 73 20 69 6e 20 74 68 65 20 32 30 2d 74  s is in the 20-t
1f80: 68 20 64 69 67 69 74 20 77 68 69 63 68 20 65 78  h digit which ex
1f90: 63 65 65 64 73 20 74 68 65 20 72 65 73 6f 6c 75  ceeds the resolu
1fa0: 74 69 6f 6e 0a 6f 66 20 61 20 36 34 2d 62 69 74  tion.of a 64-bit
1fb0: 20 66 6c 6f 61 74 2e 20 20 49 6e 20 63 6f 6e 74   float.  In cont
1fc0: 72 61 73 74 2c 20 74 68 65 20 73 65 63 6f 6e 64  rast, the second
1fd0: 20 69 6e 73 65 72 74 20 6f 6e 20 74 68 65 20 72   insert on the r
1fe0: 69 67 68 74 20 77 69 6c 6c 20 77 6f 72 6b 0a 62  ight will work.b
1ff0: 65 63 61 75 73 65 20 69 6e 20 74 68 61 74 20 63  ecause in that c
2000: 61 73 65 2c 20 74 68 65 20 6e 75 6d 62 65 72 73  ase, the numbers
2010: 20 62 65 69 6e 67 20 69 6e 73 65 72 74 65 64 20   being inserted 
2020: 61 72 65 20 73 74 72 69 6e 67 73 20 61 6e 64 20  are strings and 
2030: 61 72 65 0a 63 6f 6d 70 61 72 65 64 20 75 73 69  are.compared usi
2040: 6e 67 20 6d 65 6d 63 6d 70 28 29 2e 3c 2f 70 3e  ng memcmp().</p>
2050: 0a 0a 3c 70 3e 0a 4e 75 6d 65 72 69 63 20 61 6e  ..<p>.Numeric an
2060: 64 20 74 65 78 74 20 74 79 70 65 73 20 6d 61 6b  d text types mak
2070: 65 20 61 20 64 69 66 66 65 72 65 6e 63 65 20 66  e a difference f
2080: 6f 72 20 74 68 65 20 44 49 53 54 49 4e 43 54 20  or the DISTINCT 
2090: 6b 65 79 77 6f 72 64 20 74 6f 6f 3a 0a 3c 2f 70  keyword too:.</p
20a0: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
20b0: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
20c0: 45 20 74 33 28 61 20 49 4e 54 45 47 45 52 29 3b  E t3(a INTEGER);
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
20e0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 62  REATE TABLE t4(b
20f0: 20 54 45 58 54 29 3b 0a 49 4e 53 45 52 54 20 49   TEXT);.INSERT I
2100: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 27 30  NTO t3 VALUES('0
2110: 27 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ');             
2120: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
2130: 20 56 41 4c 55 45 53 28 30 29 3b 0a 49 4e 53 45   VALUES(0);.INSE
2140: 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45  RT INTO t3 VALUE
2150: 53 28 27 30 2e 30 27 29 3b 20 20 20 20 20 20 20  S('0.0');       
2160: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
2170: 4f 20 74 34 20 56 41 4c 55 45 53 28 30 2e 30 29  O t4 VALUES(0.0)
2180: 3b 0a 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43  ;.SELECT DISTINC
2190: 54 20 2a 20 46 52 4f 4d 20 74 33 3b 20 20 20 20  T * FROM t3;    
21a0: 20 20 20 20 20 20 20 20 20 20 20 20 53 45 4c 45              SELE
21b0: 43 54 20 44 49 53 54 49 4e 43 54 20 2a 20 46 52  CT DISTINCT * FR
21c0: 4f 4d 20 74 34 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  OM t4;.</pre></b
21d0: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 0a  lockquote>..<p>.
21e0: 54 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  The SELECT state
21f0: 6d 65 6e 74 20 6f 6e 20 74 68 65 20 6c 65 66 74  ment on the left
2200: 20 72 65 74 75 72 6e 73 20 61 20 73 69 6e 67 6c   returns a singl
2210: 65 20 72 6f 77 20 73 69 6e 63 65 20 27 30 27 20  e row since '0' 
2220: 61 6e 64 20 27 30 2e 30 27 0a 61 72 65 20 74 72  and '0.0'.are tr
2230: 65 61 74 65 64 20 61 73 20 6e 75 6d 62 65 72 73  eated as numbers
2240: 20 61 6e 64 20 61 72 65 20 74 68 65 72 65 66 6f   and are therefo
2250: 72 65 20 69 6e 64 69 73 74 69 6e 63 74 2e 20 20  re indistinct.  
2260: 42 75 74 20 74 68 65 20 53 45 4c 45 43 54 20 0a  But the SELECT .
2270: 73 74 61 74 65 6d 65 6e 74 20 6f 6e 20 74 68 65  statement on the
2280: 20 72 69 67 68 74 20 72 65 74 75 72 6e 73 20 74   right returns t
2290: 77 6f 20 72 6f 77 73 20 73 69 6e 63 65 20 30 20  wo rows since 0 
22a0: 61 6e 64 20 30 2e 30 20 61 72 65 20 74 72 65 61  and 0.0 are trea
22b0: 74 65 64 0a 61 20 73 74 72 69 6e 67 73 20 77 68  ted.a strings wh
22c0: 69 63 68 20 61 72 65 20 64 69 66 66 65 72 65 6e  ich are differen
22d0: 74 2e 3c 2f 70 3e 0a 7d 0a 66 6f 6f 74 65 72 20  t.</p>.}.footer 
22e0: 24 72 63 73 69 64 0a                             $rcsid.