mysql下有符号数和无符号数的相关问题
最近自己的程序在调用mysql的存储过程传参给smallint类型变量的时候,总是出现out of range value的错误,刚开始用C数值转换方式的二进制位转换思路来思考时,总是觉得没什么问题,因为我的数确实在16位二进制数下能保存,但是后来才发现,原来mysql并不是按照这种二进制转换的方式。
先附上mysql各个整数类型的取值范围:
bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数
int
从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。
smallint
从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。
tinyint
从 0 到 255 的整型数据。存储大小为 1 字节。
因为所要调用的存储过程主要是为了实现insert操作,而和这个存储过程中smallint类型的变量对应的表中栏位是一个无符号smallint,由于mysql存储过程是没有无符号这种类型,所以只好在存储过程接受时用smallint接收,当时猜想mysql可能和C语言中一样应该会自动对有符号数进行无符号数转换。
可是并不是这样,当我传入参数64000(在无符号bigint内不在有符号bigint内),mysql会提示错误out of range value,意思是超出了取值范围。在不断的测试之后,我发现mysql并不会像常用的编程语言的机制那样,会自动将有符号数转换为无符号数,当判断你不在有符号数(此处是-32768-32767)或者无符号数(0-65535)之间时,它就认定你是一个非法数,超出了范围,然后会提示错误;当你用无符号数时,你传入的若是一个负数,则认定你传入的数也是一个非法数(亲测是这样),然后也会提示该错误。
解决方法:
由于存储过程没有无符号类型,所以在接受传入的值的时候,我们可以使用大范围的数进行接收,比如这里我将smallint类型改为了int,就能正常运行了。
个人理解:
我个人觉得,mysql里面在数值方面并没有特别注意类型这个概念,而只是关心的是范围,我们设定了类型,其实就是设定了范围,当我们传入一个数字,如果在这个范围内,我们就认定是这个类型的。当然这是我个人的看法,只是为了方便理解。如果有什么问题的话,希望大家多提建议。
mysql下有符号数和无符号数的相关问题的更多相关文章
- C语言中 有符号数、无符号数、整数溢出 (转)
#include<stdio.h> void main() { int l=-1; unsigned int c=135; printf("%u\n",l+c); } ...
- C++有符号和无符号数的转换
本文转自:http://www.94cto.com/index/Article/content/id/59973.html 1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题 ...
- 关于有符号数和无符号数的转换 - C/C++
转载自:http://www.94cto.com/index/Article/content/id/59973.html 1.引例: 今天在做了一道关于有符号数和无符号数相互转换及其左移/右移的问题, ...
- 【C语言学习趣事】_33_关于C语言和C++语言中的取余数(求模)的计算_有符号和无符号数的相互转换问题
最近再次复习C++语言,用的教材是<C++ Primer>这本教材, 看到第二章的时候,里面有个问题困扰了我. 于是想上网查查怎么回事, 结果看了很久都没有得到一个满意的答案. 书上有这么 ...
- C语言基础(5)-有符号数、无符号数、printf、大小端对齐
1.有符号数和无符号数 有符号数就是最高位为符号位,0代表正数,1代表负数 无符号数最高位不是符号位,而就是数的一部分而已. 1011 1111 0000 1111 1111 0000 1011 10 ...
- C++中有符号/无符号数比较
原创文章,欢迎阅读,禁止转载. 在我的程序中有如下代码编译被警告了 if(list.size()>msize){...} warning C4018: '<' : signed/unsig ...
- matlab和FPGA中无符号数和有符号数的转化(转)
在FPGA 设计过程中经常会遇到关于数表示之间的转化问题,最常见的是无符号数和有符号数之间的转化问题.(1)在FPGA设计过程中,能够很直接的看出数字的位宽,但经常以无符号数的形式输出,在后继的处理中 ...
- c的基础 1. 无符号数和补码
计算机中储存和处理的信息是以二进制信号表示的.单个的位不是是很实用,而将这些位 组合在一起,加上某种解释,即给不同的可能位模式赋予含义,我们就行表示怎样有限集合的元素,即实现各种数据结构.计算机中使用 ...
- JAVA byte有无符号数的转换
如果你只需要对英文文本的每个字节进行数据处理,则无需考虑有符号数和无符号数的转换问题: 但如果你需要对含有中文的文本进行字节处理,则可能需要考虑有无符号数的转换问题. 以下代码均为Java代码. 1. ...
随机推荐
- Python_TCP/IP简介
本篇将开始介绍Python的网络编程,更多内容请参考:Python学习指南 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接在一起,让网络中 ...
- 21 MRO C3算法
三十九 MRO 多继承的继承顺序 一.python2.2之前用的是 经典类的MRO继承 ①深度递归继承 从左到右 ,一条路走到黑 ②广度继承 一层一层的继承 深度继承时 ...
- idea的svn安装
https://blog.csdn.net/qq_27093465/article/details/74898489
- virtualbox下centos虚拟机安装增强工具教程和常见错误解决
VirtualBox 4.3.6上安装CentOS 6.5 https://my.oschina.net/tashi/blog/190060 错误1.Building the main Guest A ...
- Eclipse配置问题
1.eclipse中通过search打开第二个文件时第一个文件自动关闭问题: 解决方案: window-preferences-general-search找到第一行的一个选项 reuse edit ...
- 如何在linux服务器上使用hanlp
关于如何在linux服务器上使用hanlp也有分享过一篇,但分享的内容与湘笑的这篇还是不同的.此处分享一下湘笑的这篇hanlp在linux服务器上使用的文章,供新手朋友学习之用. 本文主要工作是在li ...
- Linux下nohup日志输出过大问题解决方案
转载自:http://blog.csdn.net/shawnhu007/article/details/50971084 最近在一hadoop测试集群运行一个spark streaming程序,然后使 ...
- Ribbon 使用入门
Ribbon 是 Netflix 下的负载均衡项目,在集群中为各个客户端的通信提供支持,主要实现中间层应用程序的负载均衡,提供以下特性: 负载均衡器,可支持插拔式的负载均衡规则 对多种协议提供支持,例 ...
- 开源截图工具cutycapt的安装及使用
之前在安装过程中碰到很多问题,也找了不少资料.现总结了下,给有需要的朋友.centos下安装cutycapt比较麻烦,需要先安装qt47,再下载cutycapt源码编译;而在ubuntu下安装cuty ...
- AI硬件 XPU
市场对人工智能的热情持续高涨,特别是硬件领域.人工智能将成为下一个大风口,首当其冲的就包括硬件, 在图像语音识别.无人驾驶等人工智能领域的运用层面,图形处理器 (GPU)正迅速扩大市场占比,而谷歌专门 ...