【问题标题】:What Data Type to Store 0, 1, -1 values only?仅存储 0、1、-1 值的数据类型是什么?
【发布时间】:2013-11-07 22:48:07
【问题描述】:

我尝试创建一个字段为 TINYINT(1)NOT NULL-1DEFAULT 值以指示“未知”,但我从客户那里收到此错误:

更改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,并确保一切都很干净。

其他 cmets 和答案表示赞赏;在这种情况下,我决定让NULL 表示未知

【问题讨论】:

  • 我相信这个答案对你有用。 stackoverflow.com/questions/4401673/…
  • 也许您应该使用可为空的字段,并将null 设置为未知
  • 为什么不让NULL代表未知?
  • 这听起来像是一个真正的错字;你能发布完整的ALTER 声明吗?
  • @EdCottrell 我在问题中添加了声明,谢谢:)

标签: mysql sql database rdbms sqldatatypes


【解决方案1】:

我认为您应该将其存储为一点(如果您关心存储大小),并让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 无法正确显示时会产生错误。 (说实话,这让我很吃惊。)

【讨论】:

  • 顺便说一句,我注意到您没有在语句中的 BIT 字段中输入字段长度,这不是必需的吗?此外,如果它是我唯一的 BIT 列(它恰好在此表中),我认为我不会节省任何存储空间;我相信 BIT 最多占用 8 列的 1 个字节,而 TINYINT 现在也占用一个字节吗?谢谢:)
  • @Drewdavid 。 . .我添加了长度。虽然 MySQL 接受 bit 没有长度,但文档表明长度是必需的。
  • tinyint(1) 确实将该列的值限制为一位数。
猜你喜欢
  • 2023-03-19
  • 2010-12-26
  • 1970-01-01
  • 2019-04-25
  • 2012-03-28
  • 2012-06-13
  • 1970-01-01
  • 2017-07-19
  • 2021-07-23
相关资源
最近更新 更多