Mysql 仅存储0、1、-1值的数据类型是什么?
我尝试创建一个字段作为Mysql 仅存储0、1、-1值的数据类型是什么?,mysql,sql,database,rdbms,sqldatatypes,Mysql,Sql,Database,Rdbms,Sqldatatypes,我尝试创建一个字段作为TINYINT(1),非空和默认值-1,以指示“未知”,但我从我的客户端收到了以下错误: 更改MyTable时出错:SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第1行“”附近要使用的正确语法 我也试着把长度设为2,得到了同样的信息 猜测TINYINT不是这种指定的正确数据类型,但它是什么 编辑:读了Ed Cottrell的评论后,我发现它起作用了。我想在某个地方有一个额外的字符,下面是我的客户机(使用Querious for Mac)生成的语句: ALT
TINYINT(1)
,非空
和默认值-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`;
注意到那里有评论
,并确保所有东西都是干净的
对其他意见和答复表示赞赏;我决定让NULL
在这种情况下表示未知我认为您应该将其存储为一点(如果您关心存储大小),让NULL
表示“未知”
将一个字段声明为非null
,然后有一个特殊值,本质上意味着null
,这似乎很奇怪
编辑:
以下语法“适用于”:
“works”在引号中,因为默认值打印为“1”而不是“-1”——毕竟,(1)
表示只打印一个数字
也许在MySQL的一些早期版本中,当它看到-1
无法正确显示时,会生成一个错误。(老实说,这会让我吃惊。)我认为您应该将其存储为一点(如果您关心存储大小的话),并让NULL
表示“未知”
将一个字段声明为非null
,然后有一个特殊值,本质上意味着null
,这似乎很奇怪
编辑:
以下语法“适用于”:
“works”在引号中,因为默认值打印为“1”而不是“-1”——毕竟,(1)
表示只打印一个数字
也许在MySQL的一些早期版本中,当它看到-1
无法正确显示时,会生成一个错误。(老实说,这会让我吃惊。)我认为您应该将其存储为一点(如果您关心存储大小的话),并让NULL
表示“未知”
将一个字段声明为非null
,然后有一个特殊值,本质上意味着null
,这似乎很奇怪
编辑:
以下语法“适用于”:
“works”在引号中,因为默认值打印为“1”而不是“-1”——毕竟,(1)
表示只打印一个数字
也许在MySQL的一些早期版本中,当它看到-1
无法正确显示时,会生成一个错误。(老实说,这会让我吃惊。)我认为您应该将其存储为一点(如果您关心存储大小的话),并让NULL
表示“未知”
将一个字段声明为非null
,然后有一个特殊值,本质上意味着null
,这似乎很奇怪
编辑:
以下语法“适用于”:
“works”在引号中,因为默认值打印为“1”而不是“-1”——毕竟,(1)
表示只打印一个数字
也许在MySQL的一些早期版本中,当它看到-1
无法正确显示时,会生成一个错误。(老实说,这会让我吃惊。)我相信这个答案对你会有用的。也许您应该使用nullable字段,并将null
设置为unknown?为什么不让null
表示unknown?这听起来像是一个实际的打字错误;你能发布完整的ALTER
声明吗?@EdCottrell我在问题中添加了声明,谢谢:)我相信这个答案对你有用。也许您应该使用nullable字段,并将null
设置为unknown?为什么不让null
表示unknown?这听起来像是一个实际的打字错误;你能发布完整的ALTER
声明吗?@EdCottrell我在问题中添加了声明,谢谢:)我相信这个答案对你有用。也许您应该使用nullable字段,并将null
设置为unknown?为什么不让null
表示unknown?这听起来像是一个实际的打字错误;你能发布完整的ALTER
声明吗?@EdCottrell我在问题中添加了声明,谢谢:)我相信这个答案对你有用。也许您应该使用nullable字段,并将null
设置为unknown?为什么不让null
表示unknown?这听起来像是一个实际的打字错误;您能发布完整的ALTER
语句吗?@EdCottrell我在问题中添加了该语句,谢谢:)作为旁白,我注意到您的语句中的位字段中没有输入字段长度,这是不是不必要?另外,如果它是我唯一的位列(正好在这个表中),我认为我不会得到任何存储节省;我相信BIT最多占用8列的1个字节,TINYINT也占用1个字节,是吗?谢谢:)@Drewdavid。我把长度加进去了。虽然MySQL接受不带长度的bit
,但文档表明长度是必需的。tinyint(1)
并没有将该列的值限制为一位。顺便说一句,我注意到您的语句中没有在bit字段中添加字段长度,这不是必需的吗?另外,如果它是我唯一的位列(正好在这个表中),我认为我不会得到任何存储节省;我相信BIT最多占用8列的1个字节,TINYINT也占用1个字节,是吗?谢谢:)@Drewdavid。我把长度加进去了。虽然MySQL接受不带长度的bit
,但文档表明长度是必需的。tinyint(1)
没有将该列的值限制为一位。顺便说一句,我注意到您没有将字段长度
field bit(1) default NULL,
create table t (
val int,
flag tinyint(1) default -1
);