数据库数据类型映射

数据库组件保持一个在每个Gambas数据类型与基础数据库驱动的每个数据类型之间的映射。

当然,这个映射不是双向的。往往一个Gambas数据类型在数据库系统中不存在,而且更经常是矛盾的。

由于映射,当设计你的数据库时必须非常小心。如果你不想出任何问题,确保总是使用Gambas提供数据库管理器。

Beware with the NULL SQL value!

In Gambas, NULL and the void string are the same thing, but usually it's not in database servers.

Gambas always stores NULL in the database, never a void string, and you must take that into account when writing your SQL requests.

For example, don't do:
SELECT * FROM table WHERE name = '';
But do:
SELECT * FROM table WHERE name IS NULL;

No solution has been found to handle that automatically yet.

MySQL

下面是MySQL数据库驱动的映射:

Gambas数据类型 MySQL数据类型 缺省使用的数据类型
Boolean BOOL
TINYINT (长度= 1)
BOOL
Integer TINYINT (长度> 1) SMALLINT
MEDIUMINT
INT
YEAR
INT
Long BIGINT BIGINT
Serial INT UNSIGNED NOT NULL AUTO_INCREMENT
BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
Float FLOAT
DOUBLE
DECIMAL
REAL
NUMERIC
DOUBLE
Date TIMESTAMP
DATE
TIME
DATETIME
DATETIME
Blob LONGBLOB
LONGTEXT
BLOB (长度>= 16777216)
TEXT (长度>= 16777216)
TEXT
String VARCHAR
BLOB (长度< 16777216)
TEXT (长度< 16777216)
其他全部。
VARCHAR 如果长度<= 255.
TEXT 其他。

MySQL对于blob或text字段没有不同。所以Gambas依赖字段的长度来决定一个字段是text还是blob。

PostgreSQL

下面是PostgreSQL数据库驱动的映射:

Gambas数据类型 PostgreSQL数据类型 缺省使用的数据类型
Boolean BOOL BOOL
Integer INT2
INT4
INT
INT
Long INT8
BIGINT
BIGINT
Serial BIGSERIAL BIGSERIAL
Float NUMERIC
FLOAT4
FLOAT8
FLOAT8
Date ABSTIME
RELTIME
DATE
TIME
TIMESTAMP
DATETIME
TIMESTAMPTZ
TIMESTAMP
Blob BYTEA BYTEA
String CHAR
BPCHAR
VARCHAR
TEXT
NAME
CASH
其他全部。
VARCHAR
TEXT 无限制字符串字段。

SQLite

下面是SQLite数据库驱动的映射:

Gambas数据类型 SQLite数据类型 缺省使用的数据类型
Boolean CHAR
TINYINT
INT1
BOOL
BOOL
Integer SMALLINT
INT2
MEDIUMINT
INT
INT4
INT4
Long INT8
BIGINT
BIGINT
Serial INTEGER INTEGER AUTOINCREMENT
Float DECIMAL
NUMERIC
DOUBLE
FLOAT8
REAL
FLOAT
FLOAT4
FLOAT8
Date DATE
TIME
TIMESTAMP
DATETIME
DATETIME
Blob BLOB BLOB
String CHAR()
CLOB
TEXT
VARCHAR
ENUM
SET
YEAR
其他全部。
VARCHAR
TEXT 无限制字符串字段。

ODBC