Skip to main content
Version: 20 R5

Data types overview

In 4D, data are handled according to their type in two places: database fields and the 4D language.

Although they are usually equivalent, some data types available at the database level are not directly available in the language and are automatically converted. Conversely, some data types can only be handled through the language. The following table lists all available data types and how they are supported/declared:

Data TypesDatabase support(1)Language supportvar declarationC_ or ARRAY declaration
AlphanumericYesConverted to text--
TextYesYesTextC_TEXT, ARRAY TEXT
DateYesYesDateC_DATE, ARRAY DATE
TimeYesYesTimeC_TIME, ARRAY TIME
BooleanYesYesBooleanC_BOOLEAN, ARRAY BOOLEAN
IntegerYesConverted to longintIntegerARRAY INTEGER
LongintYesYesIntegerC_LONGINT, ARRAY LONGINT
Longint 64 bitsYes (SQL)Converted to real--
RealYesYesRealC_REAL, ARRAY REAL
Undefined-Yes--
Null-Yes--
Pointer-YesPointerC_POINTER, ARRAY POINTER
PictureYesYesPictureC_PICTURE, ARRAY PICTURE
BLOBYesYesBlob, 4D.BlobC_BLOB, ARRAY BLOB
ObjectYesYesObjectC_OBJECT, ARRAY OBJECT
Collection-YesCollectionC_COLLECTION
Variant(2)-YesVariantC_VARIANT

(1) Note that ORDA handles database fields through objects (entities) and thus, only supports data types available to these objects. For more information, see the Object data type description.

(2) Variant is actually not a data type but a variable type that can contain a value of any other data type.

Default values

When variables or parameters are typed by means of an explicit declaration, they receive a default value, which they will keep during the session as long as they have not been assigned.

The default value depends on the variable type:

TypeDefault value
BooleenFalse
Date00-00-00
Longint0
Time00:00:00
Picturepicture size=0
Real0
PointerNil=true
Text""
BlobBlob size=0
Objectnull
Collectionnull
Variantundefined

Null as default value

Variables of type Object, Collection, Pointer, and Picture have null as default value, but actually get an intermediary status when declared and not assigned. They behave like null values, but with some differences, generating less errors when the code tries do access them.

Converting data types

The 4D language contains operators and commands to convert between data types, where such conversions are meaningful. The 4D language enforces data type checking. For example, you cannot write: "abc"+0.5+!12/25/96!-?00:30:45?. This will generate syntax errors.

The following table lists the basic data types, the data types to which they can be converted, and the commands used to do so:

Data Type to Convertto Stringto Numberto Dateto Timeto Boolean
String (1)NumDateTimeBool
Number (2)StringBool
DateStringBool
TimeStringBool
BooleanNum

(1) Strings formatted in JSON can be converted into scalar data, objects, or collections, using the JSON Parse command.

(2) Time values can be treated as numbers.

Note: In addition to the data conversions listed in this table, more sophisticated data conversions can be obtained by combining operators and other commands.