让我们考虑一下TINYINT。 W3Schools表示它的有符号范围是-128到127,无符号范围是0到255.
1)为什么它的范围是-128到127,为什么它的范围是-128到255.
2)这些范围是否意味着我不能取-129或256的值? (假设我正在填写一个表格,我有一个文本框)
答案 0 :(得分:0)
有符号和无符号的范围与优化相同。 unsigned仅用于上限意味着它不允许负数。所以,当你知道你只需要正数时,总是使用ununsigned。
检查here
答案 1 :(得分:0)
tinyint值不是-128到255,这就是他们不说的原因。
创建表时,它是签名或未签名的。如果未指定,则默认值为-128至127.如果在创建表时指定unsigned,则其值为0到255。
Insert into tbl_name (1, 2, 3)
Values (1, 2, 3);
Insert into tbl_name (1, 2, 3)
Values (1, 2, 3);
第二个答案是“是”,你不能在tinyint中使用-129或256的值。检查此link以了解每个的上限和下限。
答案 2 :(得分:0)
TINYINT UNSIGNED
通过8位(1字节)表示。信息理论的基本知识表明只有256个不同的值(256 = 2 ^ 8)可以用8位表示。
" tinyint"的8位是由MySQL 以两种方式之一解释的:
TINYINT SIGNED
,其中256个值被解释为为0..255,或
TINYINT
(别名SIGNED
,因为0
是默认值),其中解释的范围是-128..127。
当最高位为SIGNED
时,8位在UNSIGNED
和1
之间相同地表示0..127。但当最高位为ENUM('red', 'yellow', 'green')
时,8位代表负数或更大的正数。
如果您愿意,您可以将 256个值解释为' red',' yellow',' green',这正是使用不同数据类型时所发生的情况:
CHAR
8位字节的另一个解释为您提供Ascii字符。请参阅VARCHAR
,TEXT
,TINYINT
等
由于SIGNED
必须是UNSIGNED
或TINYINT
,因此 不能包含这两个值的SMALLINT SIGNED
列:-111和222(在不同的行中)。如果您需要,请使用import slick.driver.PostgresDriver.api._
import slick.lifted._
import java.sql.{Date, Timestamp}
/** A representation of the message decorated for Slick persistence
* created_date should always be null on insert operations.
* It is set at the database level to ensure time syncronicity
* Id is the Twitter snowflake id. All columns NotNull unless declared as Option
* */
class RawMessages(tag: Tag) extends Table[(String, Option[String], Timestamp)](tag, Some("rti"), "RawMessages") {
def id = column[String]("id", O.PrimaryKey)
def MessageString = column[Option[String]]("MessageString")
def CreatedDate = column[Timestamp]("CreatedDate", O.SqlType("timestamp default now()"))
def * = (id, MessageString, CreatedDate)
}
。 (这导致讨论数字的16位表示。)