Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 仅存储0、1、-1值的数据类型是什么?_Mysql_Sql_Database_Rdbms_Sqldatatypes - Fatal编程技术网

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
 );