在SQL Server中,使用数据类型 binary(n) 和 varbinary(n) 存储二进制数据,n是指字节数量:binary(n):固定长度为

n 字节,其中 n 值从 1 到 8,000 ,存储空间为 n 字节;

varbinary( n | max):可变长度,n 的取值范围为 1 至 8,000,max 是指最大存储空间是 2^31-1

个字节,即最大4GB;

n:在表列定义或变量声明语句中没有指定 n,则默认长度为 1;在CAST 函数中没有指定 n,则默认长度为 30;

在将数据转换为二进制数据时,SQL Server会对生成的二进制数据进行填充或截断,详细的规则是:填充(或扩展)的二进制数据是16进制的0x00的整数倍,这就是说,填充的字节中每一个bit都是0;

将字符类型转换成二进制数据时,在数据的右侧填充或截断数据,填充数值是0x00;

将其他类型数据转换成二进制数据时,在数据的左侧填充或截断数据,填充数值是0x00;在截断数据时,保留低位的数据,将高位数值截断;

一、初试binary类型定义二进制变量

1.存储单位是Byte

数据类型binary 和 varbinary 占用的存储空间的单位不是bit,而是 bytedeclare @varBi binary(1)

set @varBi=1

输出结果是:0x01,结果以16进制编码显示,共8bit。

2.为binary变量赋值

可以使用10进制数据为binary类型的变量赋值,也可以直接使用16进制数值为binary变量赋值;declare @biA binary(1)

set @biA= 0x01

二、二进制数据的类型转换

1. 数值类型隐式转换成binary类型

系统自动将 int类型隐式转换成binary类型,但是,binary必须显式强制转换成int类型。declare @varBi binary(1)

set @varBi=1

select @varBi,cast(@varbi as int)

2.字符类型不能隐式转换成binary类型,需要显式转换

将字符类型转换成binary类型的过程是:逐个将字符的ASCII码转换成二进制数据,末尾补0,或截断末尾多余的字符declare @varBi binary(8)

set @varBi=cast('1h' as binary(8))

select @varBi,ascii('1'),ascii('h'),cast(@varbi as varchar),DATALENGTH(cast(@varbi as varchar))

输出结果分析:0x31 是16进制,换算成10进制数值是49,和字符“1”的ASCII值相同;

0x68 是16进制,换算成10进制数值是104,和字符“h”的ASCII值相同;

末尾补0:由于字符串的长度是2Byte,定长binary(8)的长度是8Byte,在binary(8) 类型的末尾补0,补齐8Byte;

在将binary转换成字符类型时,输出结果是字符 “1h”,而不是数字,说明,按照ASCII将数值转换成字符;

转换成字符串类型时,长度是8Byte,未显示的字符是不可打印的;

三、将字符串转换成二进制类型

从字符数据类型转换成binary或varbinary类型时,将在右侧发生截断或填充,填充的是16进制的0x00。当从字符类型(char、varchar、nchar、nvarchar)转换为不同长度的

binary 或 varbinary 数据类型时,SQL Server

将在二进制数据的右侧填充或截断数据。从字符串的左边逐字节转换,如果字符串的长度大于binary的长度,则右边截断;如果字符串的长度小于binary的长度,则右边填充0x00;

1.转换成binary或varbinary类型时,从数据的右侧截断数据declare @varBi binary(2)

set @varBi=cast('123' as binary(3))

select @varBi,cast(@varbi as varchar)

2.转换成binary或varbinary类型时,从数据的右侧填充数据,填充的数值是0x00declare @varBi binary(8)

set @varBi=cast('123' as binary(8))

select @varBi,cast(@varbi as varchar)

四、将整数类型转换为二进制类型

从整数类型转换为 binary 或 varbinary 时,在数据的左侧填充或截断数据,填充将通过使用十六进制的零来完成。

1.从整数类型转换为二进制类型时,在数据的左侧截断数据,即保留低位的数据,将高位数值截断declare @biToInt binary(1)

set @biToInt=300

select @biToInt,cast(@biToInt as int)

分析:由于binary(1)是1Byte,最大值是255,发生上溢,左侧发生截断,舍弃左边高位数值 256,保留低位数值44

2.从整数类型转换为二进制类型时,在数据的左侧填充数据,即在高位填充数值:0x00declare @biToInt binary(3)

set @biToInt= 12

select @biToInt,cast(@biToInt as int)

如果没有发生溢出,那么不管int类型数值有多大,都能生成相同的值,如果binary长度较长,那么左侧填充为0x00。

五、二进制数据的比较,将自动提升操作数的数据类型

在SQL

Server中,字节大的二进制数据类型,其类型处于“高”位。在进行二进制数值比较之前,首先匹配两个操作数的数据类型,将两个操作数提升为相同的数据类型,这体现在比较两个binary类型的变量时,将字节数低的数据类型提升,保持两个操作数的字节数相同。提升的字节使用0x00填充,并且是在右侧填充,这将增大binary的数值。

1.自动提升数据类型,在右侧填充0x00declare @biA binary(1)

declare @biB binary(2)

set @biA=1set @biB=2

select @biA,@biB,iif(@biA >= @biB,'>=','

输出结果分析:在比较时,SQL Server将变量@biA 的数据类型提升为binary(2),在右侧填充1byte,变成0x0100,数值是256,所以比较的结果是 >=;

如果变量@biB的值是257,那么输出的结果将是

declare @biB varbinary(2)

set @biA=1set @biB=257

select @biA,@biB,iif(@biA >= @biB,'>=','

php mysql binary_varbinary 和 binary 用法全解相关推荐

  1. MySQL数据类型以及基本使用详解

    MySQL数据类型以及基本使用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL服务器的主要组件 我们知道MySQL的主要组件主要是由服务端(mysqld)和客户端 ...

  2. linux 用root安装mysql数据库_Linux上安装Mysql及简单的使用详解

    1. 安装mysql sudo apt-get update sudo apt-get install mysql-server sudo apt-get install python-mysqldb ...

  3. docker导入MySQL文件_Docker容器中Mysql数据的导入/导出详解

    前言 Mysql数据的导入导出我们都知道一个mysqldump命令就能够解决,但如果是运行在docker环境下的mysql呢? 解决办法其实还是用mysqldump命令,但是我们需要进入docker的 ...

  4. php mysql无限_php+mysql实现无限分类实例详解

    php+mysql实现无限分类实例详解 fenlei($arr[$i][0]);   //$arr[$i][1]表示第$i+1个分类的id的值.进行递归,也就是把自己的id作为f_id参数把自己的子类 ...

  5. 深入mysql慢查询设置的详解

    深入mysql慢查询设置的详解 在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间 比较 ...

  6. mysql查询语句详解_基于mysql查询语句的使用详解

    1> 查询数据表除了前三条以外的数据. 起初我想到的是这条语句 SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ...

  7. 关于Tomcat与MySQL连接池问题的详解

    转载自   关于Tomcat与MySQL连接池问题的详解 研究了一天,终于有所收获,希望对大家有所帮助.首先请大家注意:这里尤其讨论Tomcat5.5版本中遇到的问题,为什么尤其单对这个版本,我一会儿 ...

  8. mysql日期时间操作函数详解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. win7可以设定每周从哪一天开始,win2003等不能方便的修改.有的是周日开始,有的是周一开始.而 ...

  9. mysql入门优化_MySQL数据库:MySQL十大优化技巧详解

    本文主要向大家介绍了MySQL数据库的MySQL十大优化技巧详解,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是 ...

最新文章

  1. go语言服务器连接mysql_go语言原生连接数据库
  2. Shiny平台构建与R包开发(五)——ui美化
  3. system volume information怎么删除_文件系统怎么让Linux内核认识自己
  4. scrapy-redis源码抛析
  5. html文件用safari打开方式,如何使用openURL()读取在safari中打开的html文件 - c#代码 - 源码查...
  6. 中文版php.ini
  7. ux和ui_使用UX设计师为Amazon的Alexa学习会话式UI的基础
  8. android colorstatelist_B站Android多主题框架开源:MagicaSakura
  9. Linux、命令ps 各字段意思
  10. 如何使用iMazing为iPad创建配置文件
  11. 主动轮廓模型——Snake分割算法(MATLAB)
  12. 迅雷精简版 4.0.0 Mac中文版
  13. STM8(STM8S003F3) Bootloader (IAP) 升级程序
  14. 可汗学院:宏观经济学笔记
  15. 论文泛读: 基于改进退化隐马尔可夫模型的设备健康诊断与寿命预测研究
  16. 数列极限的性质与判定
  17. 关于双模键盘的模式转化
  18. C++输出平行四边形和菱形
  19. 阿里云香港服务器被打流量攻击怎么办
  20. 软件工程师嵌入式开发交流论坛推荐排行

热门文章

  1. pytorch实现ResNet50模型(小白学习,详细讲解)
  2. 为什么用分流器(小型交换机)将一根网线分为分为两根后能够产生两个ip地址?
  3. 小技巧——优盘图标改变和背景改变
  4. 2022-2027年中国水性树脂行业市场深度分析及投资战略规划报告
  5. 算法学习左神第三节课
  6. iOS 判断设备是否越狱
  7. VMware虚拟机怎么配置直通
  8. 第十二届蓝桥杯单片机省赛
  9. mybatis中update语句使用selectKey返回更新的主键
  10. maxscript中文教程(绝版发布!!)