我需要将我的表定义为
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`o_id` int(11) unsigned NOT NULL,
`m_name` varchar(45) NOT NULL,
`o_name` varchar(45) NOT NULL,
`customer_id` int(11) unsigned NOT NULL,
`client_id` tinyint(4) unsigned DEFAULT '1',
`set_id` tinyint(4) unsigned DEFAULT NULL,
`s1` tinyint(4) unsigned DEFAULT NULL,
`s2` tinyint(4) unsigned DEFAULT NULL,
`s3` tinyint(4) unsigned DEFAULT NULL,
`review` varchar(2045) DEFAULT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `br_o_id_idx` (`order_id`),
KEY `br_date_idx` (`created_at`),
KEY `br_on_idx` (`operator_name`),
KEY `br_mn_idx` (`merchant_name`)
)
但正如我在寻找sequelize文档时,它不支持其大小的int。
答案 0 :(得分:3)
对于MySQL,Sequelize.BOOLEAN数据类型映射到TINYINT(1)。参见
和
http://docs.sequelizejs.com/en/v3/api/datatypes/
如@ user866762所述,括号中的数字仅影响数据的显示方式,而不影响数据的存储方式。因此,TINYINT(1)与TINYINT(4)应该对您的数据没有影响。
答案 1 :(得分:1)
由于表定义中缺少ZERO_FILL
,我怀疑tinyint(4)
可能不会按照您的想法执行。来自11.2.5 Numeric Type Attributes:
MySQL支持扩展,可选择在类型的base关键字后面的括号中指定整数数据类型的显示宽度。
...
显示宽度不会限制可以存储在列中的值的范围。
...
例如,指定为SMALLINT(3)的列的通常SMALLINT范围为-32768到32767,超出三位数允许的范围之外的值将使用超过三位数完整显示。
我不确定其他RDBMS是否会以不同方式处理这些数字,但是通过仔细阅读sequelize source,它们看起来就像是在同一个,不正确的印象中。
话虽如此,您的架构的重要部分是,您希望将这些字段存储为TINYINT
s(仅使用一个存储字节来包含0到255之间的值),遗憾的是, Sequelize DataTypes。我可能会建议打开PR来添加它......
另一方面,如果您真的在寻找ZEROFILL功能,并且需要指定显示宽度为4,那么您可以执行类似Sequelize.INTEGER(4).ZEROFILL
的操作,但很明显,在你的数据库中浪费太多空间。