Pha*_*nce 6 datatypes sql-standard
在设计数据库表时(使用诸如 Enterprise Architect 之类的工具),当我将来需要切换到不同的数据库时,如何仅使用适用于所有数据库的“通用”数据类型?在切换时,我想避免将新数据库中不可用的列的数据类型更改为新数据库中可用的适当数据类型。
换句话说,是否有任何 ANSI 数据类型可以在具有相同大小的所有数据库中工作?也就是说,类似于“ANSI SQL”,有没有类似“ANSI SQL 数据类型”的东西?
a_h*_*ame 13
对于最基本的数据类型,几乎所有的 DBMS 要么直接支持 ANSI 数据类型,要么至少允许指定它们。
以下声明:
create table products
(
product_id integer not null primary key,
product_name varchar(100),
price decimal(10,2)
);
Run Code Online (Sandbox Code Playgroud)
适用于几乎所有 DBMS。然而,数据类型将被转换为特定于 DBMS 的数据类型(例如,integer
将number
在 Oracle 中更改为,或更改varchar
为varchar2
)。
当涉及到更“高级”的数据类型,如 CLOB、BLOB、XML、Json 或地理空间类型时,这不再适用(CLOB、BLOB 很常见,但例如 Postgres 无法理解,尽管您可以轻松创建一个域或具有该名称的用户数据类型以使其更兼容)。
ANSI 标准定义的基本数据类型是:
并非所有 DBMS 都支持所有这些(MySQL 没有间隔数据类型,MySQL 和 SQL Server 没有真正的布尔类型,Oracle 根本没有布尔类型或真正的 DATE 或 TIME 数据类型,Postgres没有nchar
- 该列表可以继续下去)。但最常见的通常效果很好。
根据我的经验,以下各项在不同的 DBMS 中都没有(主要)问题(尽管这是我的经验 - 这远不是一个完整或明确的列表!)
如果您坚持使用这些,那么您几乎是“通用的”,但是当您从一个 DBMS 转到另一个 DBMS 时,其他任何事情都会给您带来一些(令人不快的)惊喜。