在 MySQL 中, TINYINT是一种整数数据类型,用于存储小范围的整数值。
它可以存储范围(数值大小范围)在:
-128到127之间的有符号值,
或者范围在 0到255之间的无符号值
具体取决于列的定义方式。
TINYINT类型通常用于保存布尔值(0或1),或者存储较小的整数数据。
在 数据库 中, TINYINT类型只占用1字节的存储空间。
要定义一个无符号的TINYINT列,可以使用以下SQL 语句:
CREATE TABLE 表名 (
列名 TINYINT UNSIGNED,
...
);
要定义一个有符号的TINYINT列,可以使用以下SQL 语句:
CREATE TABLE 表名 (
列名 TINYINT,
...
);
可以看出,创建的时候INYINT列默认是表示 有符号的。
对于有符号的TINYINT类型来说,取值范围为-128到127,或者无符号的取值范围为0到255。
这是因为TINYINT使用一个字节(8位)来存储数据,其中1位被用作符号位(表示正负),而剩下的7位用于表示数值。
在有符号的TINYINT中,最高位被用作符号位,0表示正数,1表示负数。剩下的7位用于存储实际的数值。
根据二进制补码表示法,有符号的TINYINT可以表示的范围是从-2^7 (-128) 到 2^7-1 (127)。由于有符号TINYINT包括了0和负数在内,所以其取值范围是从-128到127。其中,-128用二进制表示为10000000,而127用二进制表示为01111111。
需要注意的是,如果将有符号的TINYINT类型的列定义为无符号,那么它将能够表示的范围是0到255,而不是-128到127。无符号的TINYINT类型的所有8位都用于表示数值,没有符号位。
如果一个列定义为无符号的TINYINT类型,并且尝试插入一个大于255的值(比如300),将会发生以下情况:
虽然MySQL会进行截断处理,但是建议在设计数据库时遵循数据类型的规范,确保插入的数据不会超出预期的取值范围。这有助于数据的完整性和一致性,避免出现意外的结果或错误。
SELECT * FROM `user` WHERE age > '11';
在执行这条SQL语句时,会发生隐式的类型转换。
由于 字符串常量'11' 被与TINYINT类型的age列进行比较,数据库系统会 尝试将字符串转换为数值类型 进行比较。
根据MySQL的隐式类型转换规则,字符串会被转换为对应的数值类型。
在这种情况下,字符串'11'会被转换为整数类型,因为age列是TINYINT类型(整数类型)。
如果age列的实际值大于11(整数),则该行将被检索出来。否则,该行不会被包含在结果中。
**需要注意的是,隐式类型转换可能导致意外结果或不一致的行为。为了确保准确的比较,建议使用正确的数据类型进行比较,避免依赖隐式类型转换。**在此例中,可以将比较值改为11(整数)而不是字符串'11',以确保正确的比较操作。
SELECT * FROM `user` WHERE age > 11;