`
xubindehao
  • 浏览: 240315 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mysql5 unsigned 相减出现补数 溢出 解决办法

阅读更多

2010-08-17 17:36

在网上查询了下,大概都是下面这个文章,文章很不错,但是就是说注意 ,没有提出解决方法。现在我来补充下,下面先说下这个文章,然后给出答案


所有整数类型可以有一个可选(非标准)属性UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。
mysql4:
mysql> create table wubx(a TINYINT  unsigned not null default '0'); 
Query OK, 0 rows affected (0.04 sec)
mysql> select * from wubx;
Empty set (0.00 sec)
mysql> insert wubx values(0);
Query OK, 1 row affected (0.00 sec)
mysql> select * from wubx;  
+------+
| a    |
+------+
|    0 |
+------+
1 row in set (0.00 sec)
mysql> update wubx set a=a-1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 1
mysql> select * from wubx;  
+------+
| a    |
+------+
|    0 |
+------+
1 row in set (0.00 sec)

mysql5:

(root@localhost) [test]> create table wubx(a int(11) unsigned not null default '0'); 
Query OK, 0 rows affected (18.44 sec)
(root@localhost) [test]> select  * from wubx; 
Empty set (0.00 sec)
(root@localhost) [test]> insert into wubx values(0);
Query OK, 1 row affected (0.00 sec)
(root@localhost) [test]> update wubx set a=a-1;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1
(root@localhost) [test]> select  * from wubx;      
+------------+
| a          |
+------------+
| 4294967295 |
+------------+
1 row in set (0.00 sec)
mysql> show warnings;
+---------+------+-----------------------------------------------------+
| Level   | Code | Message                                             |
+---------+------+-----------------------------------------------------+
| Warning | 1264 | Out of range value adjusted for column 'a' at row 1 |
+---------+------+-----------------------------------------------------+


查了一下:
在对于数值处理时:

MySQL4 会在不合规定的值插入表前自动修改为 0
Mysql5 为了速度,只存放数二进制数据,而且在加减运算中,也是二进制的运算.

所以在使用unsigned 是小心0-1 的操作.尽量在这类操作前先做一个判断.

如果直接在程序里进行判定,难免会出现数据错误,因为有一点点时间内数据是放在内存的,而没放进库里,最好的办法还是直接送出sql语句进行修改,这里mysql5有解决办法 CONVERT( 字段 + (要加减的数字) AS SIGNED )就可以了。

例如:UPDATE `user` SET `tk` = CONVERT( tk +  (-8)  AS SIGNED ) WHERE `id` = '1330'

分享到:
评论

相关推荐

    mysql unsigned 用法及相减出现补数溢出解决方法

    unsigned表示无符号的意思,也就是非负数,只用于整型并且unsigned 是MYSQL自定义的类型,非标准SQL。用途1是红苕说的起到约束数值的作用,2是可以增加数值范围(相当于把负数那部分加到正数上)。不过少用,不方便...

    MySQL整型数据溢出的解决方法

    后来通过给朋友那边把MySQL 5.1升级到MySQL 5.5去解决这个问题。 这也让我有兴趣去了解一下MySQL不同版本数据类型溢出的处理机制。 先看一下MySQL支持的整型数及大小,存储空间: pe Storage Minimum Value ...

    activerecord-mysql-unsigned:启用使用整数类型中的“ unsigned”选项来迁移ActiveRecord

    Activerecord :: Mysql ::未签名 为ActiveRecordMySQL2适配器将无符号选项添加到整数类型。 支持版本 5.0 > ActiveRecord::VERSION >= 3.2 安装 将此行添加到您的应用程序的Gemfile中: gem 'activerecord-mysql...

    C++访问MySQL

     printf("%st%st%st%st%st%sn",mysql_row[0],mysql_row[1],mysql_row[2],mysql_row[3],mysql_row[4],mysql_row[5]);   }   }   else   {   exit(-1);   }   mysql_free_result(mysql_ret);   exit...

    中国行政区域,邮政编码,5级行政区域mysql库

    `id` mediumint(7) unsigned NOT NULL AUTO_INCREMENT, `level` tinyint(1) unsigned NOT NULL COMMENT '层级', `parent_code` bigint(14) unsigned NOT NULL DEFAULT '0' COMMENT '父级行政代码', `area_code` ...

    8-bit-unsigned-number.rar_Unsigned_labview 符号数

    该程序可以实现8位无符号采数及波形显示。

    MySQL字段类型说明

    MySQL 字段类型说明 MySQL 是一个功能强大且广泛使用的关系型数据库管理系统,它支持大量的列类型,可以被分为数字类型、日期和时间类型以及字符串(字符)类型。本节对 MySQL 字段类型进行了详细的说明,包括每个...

    中国5级省市县镇村MySQL完整数据-SQL文件

    中国五级省市县镇村的MySQL完整数据,已经做成SQL文件,带建表语句 /* Navicat MySQL Data Transfer Target Server Type : MYSQL Target Server Version : 50612 File Encoding : 65001 Date: 2017-03-07 16:05:...

    Mysql数据库设计.pdf

    Mysql数据库设计 数据库设计 MYSQL数据库设计 串转义序列 \0 NUL(ASCLL 0) \' \" \b 退格 \n 新⾏ \r 回车 \t 制表符 \\ 反斜杠 数值列类型 TINYINT 1字节 ⾮常⼩的整数 有符号值:-128⾄127 ⽆符号值:0⾄255 ...

    如何把char str,或unsigned char str转换成CString

    本文将讨论如何把 char str 或 unsigned char str 转换成 CString,详细介绍 CString 的构造函数和成员函数 Format 的使用。 一、CString 的构造函数 CString 提供了多种构造函数,可以将 char str 或 unsigned ...

    把unsigned int 对调

    把unsigned int 对调

    mysql数据类型

    MySQL 数据类型详解 MySQL 数据类型是指在 MySQL 中存储数据的格式,包括整型、浮点型、定点型、字符串、日期时间型、枚举型等多种类型。下面将对 MySQL 数据类型进行详细的介绍。 整型 MySQL 中的整型包括 ...

    volatile_unsigned_int

    讲述了volatile_unsigned_int地址映射的使用说明。

    Mysql字符集编码详解

    这篇文章将详细介绍如何解决Mysql数据库乱码问题,彻底解决JAVA项目中的中文乱码问题。 一、服务器编码设置 在安装Mysql时,选择合适的字符集非常重要。如果选择不当,将会导致中文乱码问题。常见的字符集包括gbk...

    unsigned char二维数组转bmp图像函数

    自己写的unsigned char二维数组转8位bmp的函数。

    mysql 全国地区数据库表 五级数据库 村级地区表

    `id` mediumint(7) unsigned NOT NULL AUTO_INCREMENT, `level` tinyint(1) unsigned NOT NULL COMMENT '层级', `parent_code` bigint(14) unsigned NOT NULL DEFAULT '0' COMMENT '父级行政代码', `area_code` ...

    一次MySQL两千万数据大表的优化过程,三种解决方案!

    本文将详细介绍 MySQL 大表优化过程,包括三种解决方案,并对每种方案进行详细的分析。 问题概述 在实际应用中,我们经常遇到一些大表数据,例如用户记录表,这些表的数据量可能达到数百万甚至数千万。在这种情况...

    指针应用2_damaget7x_Unsigned_Pointerapplication_

    实验6-1数据拷贝程序将一个尺寸为256的unsigned char数组中的数据(其中数据依次为0-255),分别逆序复制到类型为int, double的两个动态缓冲区中,并分别将两个缓冲区的起始地址及其中的数据、缓冲区的最后一个单元...

    Unsigned与Signed关键字1

    Unsigned与Signed关键字 Unsigned 与 Signed 关键字是计算机编程语言中两种基本的整数类型,它们之间的主要区别在于是否使用符号位来表示数字的正负。 Signed 关键字: 在默认情况下声明的整型变量都是有符号的...

Global site tag (gtag.js) - Google Analytics