我开发了一个利用MySQL来存储一些测试数据的数据库系统。
CREATE TABLE testtable (
TEST_IDX int(11) NOT NULL AUTO_INCREMENT,
PASS_FLAG bit(1) NOT NULL,
RESULT_STRING varchar(500) NOT NULL,
TEST_DATE timestamp NULL DEFAULT NULL,
LAST_MODDATE timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
TESTED_BY varchar(45) NOT NULL,
PRIMARY KEY (TEST_IDX) )
ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=latin1;
使用的字段之一是用于指示测试集的通过/失败状态的标志。在我的开发机器上,我使用了BIT数据类型,开发了数据库交互代码并成功测试了系统。我有一个第二台开发笔记本电脑,我曾经用它来执行错误修复,当部署时间来到系统也正常工作时。
当我在生产机器上部署系统时,我设置MySQL并从笔记本电脑上的转储中导入数据库。当在我的两台开发机器上成功运行的程序尝试执行错误“生成列太长的数据”时,会导致插入失败。这对我来说没有意义,除非mysql有一个设置使得bit / tinyint / int(1)从安装到安装的行为都很奇怪。我能够通过简单地将字段设置为INT(它认为是INT(11))来正确地实现这个功能,但我不应该这样做,我想知道为什么会发生这种情况。也许有人可以澄清BIT数据类型在MYSQL中的工作原理。