要存储0,1,-1值的数据类型是什么?

时间:2013-11-07 22:48:08

标签: mysql sql database rdbms sqldatatypes

我尝试将字段创建为TINYINT(1)NOT NULLDEFAULT -1 以表示“未知”,但我收到此错误来自我的客户:

  

更改 MyTable 时出错:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的''附近使用正确的语法

我也试过制作长度为2并得到相同的信息

猜测TINYINT不是这种指定的正确数据类型,但它是什么?

编辑:我在阅读Ed Cottrell的评论后得到了它的工作。我认为某处有一个额外的角色,这是我的客户端(使用Querious for Mac)生成的声明:

ALTER TABLE `DBName`.`MyTable`
CHANGE COLUMN `MyColumn` `MyColumn` TINYINT(1) NOT NULL DEFAULT -1  COMMENT ''
AFTER `MyOtherColumn`;

注意COMMENT那里并确保一切都干净。

赞赏其他评论和答案;在这种情况下,我决定让NULL意味着未知

1 个答案:

答案 0 :(得分:3)

我认为你应该存储一下(如果你关心存储空间大小),让NULL表示“未知”。

field bit(1) default NULL,

将某个字段声明为not null然后具有一个特殊值,这实际上意味着NULL,这似乎很奇怪。

编辑:

以下语法在SQL Fiddle上“有效”:

create table t (
  val int,
  flag tinyint(1) default -1
 );

“works”在引号中,因为默认值打印为“1”而不是“-1” - 毕竟,(1)只是打印一位数。

也许在某些早期版本的MySQL中,当它看到-1无法正确显示时会产生错误。 (说实话,这会让我感到惊讶。)