unsigned表示无符号的意思,也就是非负数,只用于整型并且unsigned 是MYSQL自定义的类型,非标准SQL。用途1是红苕说的起到约束数值的作用,2是可以增加数值范围(相当于把负数那部分加到正数上)。不过少用,不方便移植 MySQL中的`unsigned`关键字是用来声明一个整数类型的字段不接受负数,仅允许存储非负数值。这个特性是MySQL特有的,非标准SQL所支持。使用`unsigned`的主要优点有两个: 1. **约束数值范围**:它能确保字段中的数据始终为正数或零,对于那些仅需要处理正数的场景特别有用,比如存储计数器或者索引。 2. **扩展数值范围**:由于不需要存储负数,`unsigned`类型的数据能够提供比对应带符号类型更大的数值范围。例如,`tinyint`的最大值为127(带符号),但变为`tinyint unsigned`后,最大值可以达到255。 然而,`unsigned`也有一些需要注意的方面: - **移植性问题**:由于不是标准SQL的一部分,当数据库结构需要在不同系统间迁移时,可能会遇到兼容性问题。 - **计算风险**:在进行数值运算时,特别是涉及负数的操作,需要特别小心,因为`unsigned`类型无法表示负数。例如,`0 - 1`会导致溢出错误,这在处理负数或减法时需要额外的逻辑来避免。 MySQL提供的整数类型包括`tinyint`、`smallint`、`mediumint`、`int`和`bigint`,它们都有对应的`unsigned`版本,用于扩展其数值范围。下面是这些类型的基本信息: - `tinyint`:1字节,带符号的范围是-128到127,无符号的范围是0到255。 - `smallint`:2字节,带符号的范围是-32768到32767,无符号的范围是0到65535。 - `mediumint`:3字节,带符号的范围是-8388608到8388607,无符号的范围是0到16777215。 - `int`(或`integer`):4字节,带符号的范围是-2147483648到2147483647,无符号的范围是0到4294967295。 - `bigint`:8字节,带符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到18446744073709551615。 浮点类型包括`float`、`double`和`decimal`,它们用于存储浮点数。其中,`float`和`double`是近似数值,而`decimal`是精确数值。需要注意的是,浮点类型不能使用`unsigned`修饰,因为它们的取值范围和最小非零值与整型不同,并且它们的设计目的是处理包含小数点的数值。 在进行`unsigned`类型的数值运算时,特别是减法操作,要防止溢出。在MySQL 5中,可以使用`CONVERT()`函数配合`AS SIGNED`来避免溢出问题。例如,更新一个`tk`字段,减去8,可以写成这样的SQL语句: ```sql UPDATE `user` SET `tk` = CONVERT( tk + (-8) ,SIGNED ) WHERE `id` = '1330' ``` 这样,即使`tk`字段是`unsigned`类型,也能正确执行减法操作,不会导致溢出错误。 `unsigned`在MySQL中是一个强大的工具,可以用来扩大整数类型的数值范围,但在使用时需注意潜在的溢出风险和移植性问题,特别是在进行数学运算时要采取适当的预防措施。
- 粉丝: 4
- 资源: 912
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助