Columns are defined by supplying necessary type information in the attribute. Supported .Net Value Types
        // Max Length String
        [Column()] public string my_col;
        // Fixed length String 
        [Column(Length = 10)] public string my_col;
        // Fixed length String + Not Nullable
        [Column(Length = 10, DefaultValue = "")] public string my_col;

        // Numerics
        [Column()] public short my_col;
        [Column()] public int my_col;
        [Column()] public long my_col;
        [Column()] public float my_col;
        [Column()] public double my_col;
        [Column()] public decimal my_col;
        [Column(Length = 20, Scale = 2)] public decimal my_col;

        // Boolean
        public bool; my_col;

        // Binary
        public byte[] my_col;

        // Time
        public System.TimeSpan my_col;
        [Column()] public System.TimeSpan my_col;

        // Date + Time
        [Column()] public System.DateTime my_col;

        // Only Date
        [Column(OnlyDate = true)] public System.DateTime my_col;
    
Reference Column If a column definition is often used in many of table-columns, so a column attributes can be defined as a reference. Name, Description, DefaultValue and AutoIncrement properties can be redefiend.
        // Attributes are defined at once to use as a reference...
        public enum Ref {
            [Column("year", Length = 4, DefaultValue = 2000, MinValue = 1900, MaxValue = 2100)] year,
            [Column("note", Length = 100)] note,
            [Column("id", Length = 5)] id,
            [Column(DateFormat:=ColumnDateFormat.OnlyDate)] only_date,
            ...
        }

        // usage
        public class my_table : Odb.Table.Base {
            [Column( Ref.year )] public int my_col;
        }
    

A column can be expanded from many reference columns.
        // extends the column's length to 5
        [Column( Ref.year, Ref.id )] public int my_col;
    


You can use connection..Provider().ToDbTypeName to get the Database Equivalent statement of the column. Example shown below, returns different results for each provider type.
        cn.Provider().ToDbTypeName(table.field);

        //-- MsSql      = numeric(4, 0)
        //-- MySql      = DECIMAL(4, 0)
        //-- MariaDB    = DECIMAL(4, 0)
        //-- Oracle     = NUMBER(4, 0)
        //-- PostgreSql = NUMERIC(4, 0)
        //-- SQLite     = NUMERIC(4, 0)
    

Column Attributes
Name : (Optional)

It is the name of the column.

Length : (Optional)

is used for string columns and also is the Precision that represents the total number of digits allowed for numeric columns.
INTEGER data type is not supported by all databases such as ORACLE; because in ANSI standards, an INTEGER is considered a number with no decimal precision.

DbType Byte Size Accept As
tinyint 3 Length=3, Scale=0
smallint 5 Length=5, Scale=0
int 9 Length=10, Scale=0
bigint 9 Length=19, Scale=0
These types are not supported for definition only. But you can allways use these types in database.
Scale : (Optional)

represents the number of decimal places to right of the decimal point.

AutoIncrement : (Optional)

allows a unique number to be generated automatically when a new record is inserted into a table.

Description : (Optional)

It is the description of the column.

Nullable : (Optional)

It is determined automatically. If the type is nullable (such as int?, string etc.) and also DefaultValue is not specified then TRUE is accepted. otherwise FALSE is accepted.

MinValue : (Optional)

It is the min value of the column for checking constraint.

MaxValue : (Optional)

It is the max value of the column for checking constraint.

DefaultValue : (Optional)

It is the default value of the column.