MatrixOne从入门到实践05——数据类型介绍

MatrixOne从入门到实践——数据类型介绍

MatrixOne的数据类型是和MySQL数据类型定义一致,可以参考:https://dev.mysql.com/doc/refman/8.0/en/data-types.html

在MatrixOne建表时,给字段定义一个恰当的数据类型是十分重要的。比如一下原则:

  • 尽可能使用数字类型来代替字符串类型
  • 尽可能使用更加准确的大小来描述字段类型
  • 如果数据没有Null存在,那么可以在定义字段时使用Not Null

类型介绍

整数类型

该类数据类型代表为严格数值类型

数据类型存储空间最小值最大值
TINYINT1 byte-128127
SMALLINT2 byte-3276832767
INT4 byte-21474836482147483647
BIGINT8 byte-92233720368547758089223372036854775807
TINYINT UNSIGNED1 byte0255
SMALLINT UNSIGNED2 byte065535
INT UNSIGNED4 byte04294967295
BIGINT UNSIGNED8 byte018446744073709551615

浮点类型

该类数据类型代表近似数值类型

数据类型存储空间精度语法表示
FLOAT324 byte23 bitsFLOAT
FLOAT648 byte53 bitsDOUBLE

字符串类型

该类数据类型表示字符串类型

数据类型存储空间语法表示
String24 byteCHAR, VARCHAR

日期与时间类型

该类数据类型表示日期或者时间类型

数据类型存储空间精度最小值最大值语法表示
Date4 byteday1000-01-019999-12-31YYYY-MM-DD
DateTime8 bytesecond0001-01-01 00:00:00.0000009999-12-31 23:59:59.999999YYYY-MM-DD hh:mi:ssssss
TIMESTAMP8 bytesecond1970-01-01 00:00:01.0000002038-01-19 03:14:07.999999YYYYMMDD hh:mi:ss.ssssss

Bool类型

该类型表示布尔值类型

数据类型存储空间
True1 byte
False1 byte

精确数值类型Decimal

数据类型存储空间精度语法表示
Decimal648 byte19位Decimal(N,S), N范围(1,18), S范围(0,N)
Decimal12816 byte38位Decimal(N,S), N范围(19,38), S范围(0,N)

示例

整数类型

  • tinyint

    mysql> select cast('127' as tinyint) ;
    +----------------------+
    | cast(127 as tinyint) |
    +----------------------+
    |                  127 |
    +----------------------+
    1 row in set (0.00 sec)
    
    mysql> select cast('-128' as tinyint) ;
    +-----------------------+
    | cast(-128 as tinyint) |
    +-----------------------+
    |                  -128 |
    +-----------------------+
    1 row in set (0.00 sec)
    
    mysql> select cast('128' as tinyint) ;
    ERROR 20201 (HY000): data out of range: data type int, value '128'
    mysql> select cast('-129' as tinyint) ;
    ERROR 20201 (HY000): data out of range: data type int, value '-129'
    
    mysql> create table tinyint (id tinyint  NOT NULL);
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> 
    mysql> select * from tinyint;
    Empty set (0.00 sec)
    
    mysql> insert into tinyint values('0');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from tinyint;
    +------+
    | id   |
    +------+
    |    0 |
    +------+
    1 row in set (0.01 sec)
    
    mysql> insert into tinyint values('a');
    ERROR 20204 (HY000): truncated type TINYINT value a for column id, 1
    mysql> insert into tinyint values(a);
    ERROR 20204 (HY000): truncated type TINYINT value a for column id, 1
    mysql> insert into tinyint values(128);
    ERROR 20204 (HY000): truncated type TINYINT value 128 for column id, 1
    

​ 可以看出,tinyint的范围为 [-128,127],超过这个范围或者不符合tinyint类型的数据 插入都会报错。

  • SMALLINT

    mysql> create table smallint (id smallint  NOT NULL);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> select * from smallint;
    Empty set (0.01 sec)
    
    mysql> insert into smallint values('0');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from smallint;
    +------+
    | id   |
    +------+
    |    0 |
    +------+
    1 row in set (0.00 sec)
    
    mysql> insert into smallint values('-32768');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from smallint;
    +--------+
    | id     |
    +--------+
    |      0 |
    | -32768 |
    +--------+
    2 rows in set (0.01 sec)
    
    mysql> insert into smallint values('-32767');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from smallint;
    +--------+
    | id     |
    +--------+
    |      0 |
    | -32768 |
    | -32767 |
    +--------+
    3 rows in set (0.00 sec)
    
    mysql> insert into smallint values('-32769');
    ERROR 20204 (HY000): truncated type SMALLINT value -32769 for column id, 1
    

    可以看出,smallint的范围为 [-32768,32767],超过这个范围或者不符合smallyint类型的数据插入都会报错。

  • INT

    mysql> insert into int values('-32769');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from int;
    +--------+
    | id     |
    +--------+
    | -32769 |
    +--------+
    1 row in set (0.00 sec)
    
    mysql> insert into int values('-2147483648');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into int values('-2147483649');
    ERROR 20204 (HY000): truncated type INT value -2147483649 for column id, 1
    mysql> select * from int;
    +-------------+
    | id          |
    +-------------+
    |      -32769 |
    | -2147483648 |
    +-------------+
    2 rows in set (0.00 sec)
    

    可以看出,int的范围为 [-2147483648,2147483647],超过这个范围或者不符合int类型的数据插入都会报错。

  • BIGINT

    mysql> create table bigint (id bigint  NOT NULL);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> select * from bigint;
    Empty set (0.00 sec)
    
    mysql> insert into bigint values('-2147483649');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into bigint values('9223372036854775808');
    ERROR 20204 (HY000): truncated type BIGINT value 9223372036854775808 for column id, 1
    mysql> insert into bigint values('-9223372036854775808');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from bigint;
    +----------------------+
    | id                   |
    +----------------------+
    |          -2147483649 |
    | -9223372036854775808 |
    +----------------------+
    2 rows in set (0.00 sec)
    
    

    取值范围如果加了unsigned,则最小值为0,最大值翻倍,如tinyint unsigned的取值范围为(0~255)。

浮点数类型

浮点型在数据库中存放的是近似值

数据类型含义
float(m,d)单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d)双精度浮点型 16位精度(8字节) m总个数,d小数位
  • FLOAT32

    mysql> select cast('123.45678' as float(5,3));
    +--------------------------------+
    | cast(123.45678 as float(5, 3)) |
    +--------------------------------+
    |                        123.457 |
    +--------------------------------+
    1 row in set (0.00 sec)
    
    mysql> select cast('123.45678' as float(5,4));
    +--------------------------------+
    | cast(123.45678 as float(5, 4)) |
    +--------------------------------+
    |                       123.4568 |
    +--------------------------------+
    1 row in set (0.00 sec)
    
    
  • FLOAT64

    mysql> select cast('123.45678905646545481' as double(14,9));
    +----------------------------------------------+
    | cast(123.45678905646545481 as double(14, 9)) |
    +----------------------------------------------+
    |                           123.45678905646545 |
    +----------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> select cast('123.45678905646545481' as double(18,12));
    +-----------------------------------------------+
    | cast(123.45678905646545481 as double(18, 12)) |
    +-----------------------------------------------+
    |                            123.45678905646545 |
    +-----------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> select cast('123.45678905646545481' as double);
    +---------------------------------------+
    | cast(123.45678905646545481 as double) |
    +---------------------------------------+
    |                    123.45678905646545 |
    +---------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> select cast('12223.45678905646545481' as double);
    +-----------------------------------------+
    | cast(12223.45678905646545481 as double) |
    +-----------------------------------------+
    |                      12223.456789056465 |
    +-----------------------------------------+
    1 row in set (0.00 sec)
    
    

    double 默认会保存17位数字

字符串类型

  • char

    无法手动指定char的个数,没有字符个数的限制,目前版本没有限制长度大小,可以导入超过24 byte 的字符

    mysql> select cast('aasdfqg' as char);
    +-----------------------+
    | cast(aasdfqg as char) |
    +-----------------------+
    | aasdfqg               |
    +-----------------------+
    1 row in set (0.00 sec)
    
    
  • varchar

    无法手动指定char的个数,没有字符个数的限制,目前版本没有限制长度大小,可以导入超过24 byte 的字符串

    mysql> select cast('aasdfqg' as varchar);
    +--------------------------+
    | cast(aasdfqg as varchar) |
    +--------------------------+
    | aasdfqg                  |
    +--------------------------+
    1 row in set (0.00 sec)
    
    

时间与日期类型

  • date

    mysql> select cast ('2022-10-08 14:55:00' as date);
    +-----------------------------------+
    | cast(2022-10-08 14:55:00 as date) |
    +-----------------------------------+
    | 2022-10-08                        |
    +-----------------------------------+
    1 row in set (0.01 sec)
    
  • datetime

    mysql> select cast ('2022-10-08 14:55:00' as datetime);
    +-------------------------------------------+
    | cast(2022-10-08 14:55:00 as datetime(26)) |
    +-------------------------------------------+
    | 2022-10-08 14:55:00                       |
    +-------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> select cast ('2022-10-08' as datetime);
    +----------------------------------+
    | cast(2022-10-08 as datetime(26)) |
    +----------------------------------+
    | 2022-10-08 00:00:00              |
    +----------------------------------+
    1 row in set (0.01 sec)
    
    
  • timestamp

    mysql> select cast ('2022-10-08 14:55:00' as timestamp);
    +--------------------------------------------+
    | cast(2022-10-08 14:55:00 as timestamp(26)) |
    +--------------------------------------------+
    | 2022-10-08 14:55:00                        |
    +--------------------------------------------+
    1 row in set (0.00 sec)
    
    

Bool类型

除了数值 0 或者字符串 ‘0’ 能被转换为 FALSE,其余任何数值和字符串数值转换均为TRUE

mysql> select cast('465' as boolean);
+----------------------+
| cast(465 as boolean) |
+----------------------+
| true                 |
+----------------------+
1 row in set (0.00 sec)

mysql> select cast(465 as boolean);
+----------------------+
| cast(465 as boolean) |
+----------------------+
| true                 |
+----------------------+
1 row in set (0.00 sec)

mysql> select cast(0 as boolean);
+--------------------+
| cast(0 as boolean) |
+--------------------+
| false              |
+--------------------+
1 row in set (0.00 sec)

mysql> select cast('0' as boolean);
+--------------------+
| cast(0 as boolean) |
+--------------------+
| false              |
+--------------------+
1 row in set (0.00 sec)

精确数值类型Decimal

DECIMAL列的声明语法是DECIMAL(M, D). M是有效数字的位数,取值范围是1到38,D是小数位数,取值范围是1到38,但是不能大于M。 如果不指定D,默认为0。如果不指定M,默认为10。

DECIMAL列的数值以二进制的形式进行存储,在MatrixOne内部,只有decimal64和decimal128这两种表示形式。在0-18位精度内,一个Decimal数值占用8个字节的存储空间,在19-38位精度内,一个Decimal数值占用16个字节的存储空间。

mysql> select cast('123.456' as Decimal(6,2));
+--------------------------------+
| cast(123.456 as decimal(6, 2)) |
+--------------------------------+
|                         123.46 |
+--------------------------------+
1 row in set (0.00 sec)

mysql> select cast('123.456' as Decimal(5,2));
+--------------------------------+
| cast(123.456 as decimal(5, 2)) |
+--------------------------------+
|                         123.46 |
+--------------------------------+
1 row in set (0.00 sec)

mysql> select cast('123.456' as Decimal(4,2));
ERROR 20203 (HY000): invalid argument DECIMAL64, bad value 123.456
mysql> select cast('123.456' as Decimal(5,3));
ERROR 20203 (HY000): invalid argument DECIMAL64, bad value 123.456
mysql> select cast('123.456' as Decimal(10,3));
+---------------------------------+
| cast(123.456 as decimal(10, 3)) |
+---------------------------------+
|                         123.456 |
+---------------------------------+
1 row in set (0.00 sec)

mysql> select cast('123.456' as Decimal(5,2));
+--------------------------------+
| cast(123.456 as decimal(5, 2)) |
+--------------------------------+
|                         123.46 |
+--------------------------------+
1 row in set (0.00 sec)

mysql> select cast('0.0456' as Decimal(5,2));
+-------------------------------+
| cast(0.0456 as decimal(5, 2)) |
+-------------------------------+
|                          0.05 |
+-------------------------------+
1 row in set (0.00 sec)

mysql> select cast('0.012456' as Decimal(5,2));
+---------------------------------+
| cast(0.012456 as decimal(5, 2)) |
+---------------------------------+
|                            0.01 |
+---------------------------------+
1 row in set (0.00 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ENOVIA是Dassault Systèmes公司旗下的产品生命周期管理(PLM)系统,可以帮助企业管理产品的设计、制造、销售和服务等全过程。二次开发是在ENOVIA系统基础上进行个性化定制和功能增强的一种方式。 下面是ENOVIA二次开发入门的详细步骤: 1. 学习ENOVIA系统基础知识 在进行二次开发之前,需要对ENOVIA系统有一定的了解,包括系统的架构、数据模型、业务流程等基本概念和操作方法。可以通过官方文档、培训课程、社区论坛等途径进行学习。 2. 确定二次开发需求 在了解ENOVIA系统基础知识的基础上,需要确定二次开发的具体需求和目标。这可以是针对某个业务流程的定制、某个功能的增强、某个数据报表的生成等。 3. 选择二次开发工具 ENOVIA系统支持多种二次开发工具,包括Java API、MQL、MatrixOne API等。需要根据二次开发需求和开发人员的技术背景选择适合的工具。 4. 进行二次开发 根据二次开发需求和选择的开发工具,进行具体的二次开发工作。这包括编写代码、测试、调试等一系列工作。 5. 部署和维护 完成二次开发后,需要将代码部署到ENOVIA系统中并进行测试。在系统运行过程中,还需要进行维护和升级,确保系统的稳定性和安全性。 以上是ENOVIA二次开发入门的详细步骤,需要注意的是,二次开发需要有一定的技术基础和经验,建议在进行二次开发之前进行充分的学习和准备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值