Sql2000、Json、Sqlite3数据库字段类型对照表

Sql2000、Json、Sqlite3、delphiXE数据库类型对照表

一、对照表及重要说明

Sql2000               Json                          delphiXE                  Sqlite3

bigint                    Int64                          ftLargeint                   BIGINT

binary                   ByteString                 ftBytes                       BINARY

bit                         Boolean                    ftBoolean                   BOOLEAN      在Sql2000中,bit =1或0或null(默认0)。注意:bit的数值代表true(bit=1)或false(bit=0或null)。在Sqlite3中:用BOOLEAN代表,同样此时代表true或false。代码使用时:if LFDMemT1.FieldByName('Z1111').AsBoolean=true then Memo1.Lines.Add('Sql2000的bit值为0或null,sqlite3该列打勾');  LFDMemT1.FieldByName('Z1111').AsBoolean=false then Memo1.Lines.Add('Sql2000的bit值为1,sqlite3该列没有打勾或去勾'); 而其列的返回值不是-1就是0,取决于代表的表达方式: LFDMemT1.FieldByName('Z1111').AsBoolean.ToString(false)=-1,代表:, Bit为1(比特1)返回-1;Bit为0(比特0)返回-1;Bit为null(比特null)返回-1;LFDMemT1.FieldByName('Z1111').AsBoolean.ToString(true)=0 ,代表: Bit为1(比特1)返回0;Bit为0(比特0)返回0;Bit为null(比特null)返回0。它们是恒等式,代表该字段占一个比特位,无实际意义,只是对返回值的表达方式不同而已。

char                      AnsiString                 ftString                      CHAR

datetime               DateTimeStamp        ftTimeStamp             DATETIME   

decimal                 BCD                          ftFMTBcd                 DECIMAL  //:   当decimal=null时, DECIMAL=null,  ftFMTBcd为''  :LFDMemT1.FieldByName('Z1111').AsString=''

float                       Double                      ftFloat                       FLOAT

image                    Blob                          ftBlob                        IMAGE   //:中间值转化:<Binary>:用流和内存流做转化

int                          Int32                         ftInteger                    INT

money                   Currency                  ftCurrency                 MONEY        (精度+小数 Json "Precision":19,"Scale":4,)

nchar                     WideString               ftWideString              NCHAR

ntext                       WideMemo              ftWideMemo             NTEXT

numeric                  BCD                         ftFMTBcd                 DECIMAL    //:  NUMERIC当成:DECIMAL处理

nvarchar                 WideString              ftWideString              NVARCHAR

real                         Single                      ftSingle                     REAL

smalldatetime        DateTimeStamp       ftTimeStamp            TIMESTAMP

smallint                  Int16                         ftSmallint                 SMALLINT

smallmoney           Currency                  ftCurrency               SMALLMONEY

sql_variant             WideString               ftWideString            NVARCHAR2  // : sql_variant类型在SQLServer中是特殊的数据类型, 也是变长的数据类型,包含两部分信息:基础类型和Value,可以存储所有的SQLServer数据类型的数据,引用时需转化:convert( NVarchar( len([FieldName].Value) ) , [FieldName].Value )

text                         Memo                      ftMemo                    TEXT

timestamp              ByteString               ftBytes                      TIMESTAMP

  //Memo1.Lines.Add('sql2000远程timestamp类型:delphi不支持解析:对于每个表来说是唯一的、自动存储的值。通常用于版本戳,该值在插入和每次更新时自动改变');//12:sql2000的timestamp:ftBytes:

tinyint                      Byte                        ftByte                       INT(1)  // : sql2000中代表0~255的ASC码而非码值

uniqueidentifier      GUID                       ftGuid                       UNIQUEIDENTIFIER

                    //:35:ftGuid,sql2000远程类型,数值: :无默认值数值自定义:固定格式32位5个分组的SHA1数字:{00000000-0000-0110-0000-000000000000}
                      //:35:ftGuid:到sqlite3本地类型,数值:{00000000-0000-0000-0000-000000000000}:默认值:固定格式32位5个分组的SHA1数字

varbinary                ByteString               ftVarBytes                VARBINARY

varchar                   AnsiString               ftString                     VARCHAR

二、数据库Sql2000及Sqlite3所有字段类型

Sql2000

bigint、binary、bit、char、datetime、decimal、float、image、int、
money、nchar、ntext、numeric、nvarchar、real、
smalldatetime、smallint、smallmoney、sql_variant、
text、timestamp、tinyint、uniqueidentifier、varbinary、varchar

Sqlite3

BIGINT、BINARY、BLOB、BLOB_TEXT、BOOL、BOOLEAN、
CHAR、CLOB、CURRENCY、
DATE、DATETEXT、DATETIME、DEC、DECIMAL、DOUBLE、DOUBLE PRECISION、
FLOAT、GRAPHIC、GUID、
IMAGE、INT、INT64、INTEGER、LARGEINT、
MEMO、MONEY、
NCHAR、NVARCHAR、NVARCHAR2、NTEXT、NUMBER、NUMERIC、
PHOTO、PICTURE、RAW、
REAL、SMALLINT、SMALLMONEY、TEXT、TIME、TIMESTAMP、TINYINT、
UNIQUEIDENTIFIER、VARBINARY、VARCHAR、VARCHAR2、WORD

关于Sqlite3的数据类型,可参考以下两位作者的原创:

https://blog.csdn.net/wulianghuan/article/details/11197743

https://www.cnblogs.com/findumars/p/7854338.html

三、关于Sqlite3中的null

        if LDestinctFDQuery1.FindField('Z1111')<>nil then
        begin
          Memo1.Lines.Add(VarToStr(LFDMemT1.FindField('Z1111').DataType)+',sql2000远程类型,数值:'+LFDMemT1.FindField('Z1111').AsString.Trim);
          //Memo1.Lines.Add('sql2000远程timestamp类型:delphi不支持解析:对于每个表来说是唯一的、自动存储的值。通常用于版本戳,该值在插入和每次更新时自动改变');//12:sql2000的timestamp:ftBytes:
          if LFDMemT1.FindField('Z1111').DataType=ftTimeStamp then
          Memo1.Lines.Add(VarToStr(LFDMemT1.FindField('Z1111').DataType)+',sql2000远程数值:'+FormatDateTime('yyyy-mm-dd hh:mm:ss.zzz',LFDMemT1.FindField('Z1111').AsDateTime) );
        end;
        if LDestinctFDQuery1.FindField('Z1111')<>nil then
        begin
          Memo1.Lines.Add(VarToStr(LDestinctFDQuery1.FindField('Z1111').DataType)+':sqlite3本地类型,数值:'+LDestinctFDQuery1.FindField('Z1111').AsString.Trim);
          if LDestinctFDQuery1.FindField('Z1111').AsString<>'' then
          begin
            //:sqlite3中null是一种特殊类型:
              //:不代表数值为空,而是有值的:AsString<>''判断不出数值为空!!你是取不出来的
            if LDestinctFDQuery1.FindField('Z1111').DataType=ftDateTime then
            Memo1.Lines.Add(VarToStr(LDestinctFDQuery1.FindField('Z1111').DataType)+',sqlite3本地数值:'+FormatDateTime('yyyy-mm-dd hh:mm:ss.zzz',LDestinctFDQuery1.FindField('Z1111').AsDateTime) );
          end;
        end;

发布了61 篇原创文章 · 获赞 6 · 访问量 5578

猜你喜欢

转载自blog.csdn.net/pulledup/article/details/102529894