跟我一起学习MySQL技术内幕(第五版):(第三章学习日记1)

第三章 数据类型
3.1数据值类别
3.1.1数值
3.1.2字符串值

3.1.1.1精确值数和近似值数
1.精确值包括整数和带小数点的数

        1>整数包括十进制数和十六进制
            十进制  :每个整数由一个不包含小数点的数字序列构成
            十六进制:默认为字符串,进行数值运算时会被视为64位的整数       
        2>带小数精确值:一个数字序列 一个小数点 另一个数字序列 
             小数点前后的数字序列可以有一个为空,但不能同时为空。

2.近似值是采用科学计数法表示浮点数他们带有一个底数和一个指数。具体表示方法:在整数或者浮点数后面紧跟着字母e或者E,接着是一个正号(+)或负号(-)然后是一个表示指数的整数。

十六进制数不能用科学技术法表示,这是因为指数部分的开始字母‘e’也是一个合法的十六进制数,这会产生二义性。

任意数值前边可以加上正号或者负号,以此表明他是一个正值或负值。

在计算表达式时,MySQL会根据以下规则来决定是使用精确计算还是使用近似计算。

1.只要表达式里有近似值,那么它便会当做浮点(近似)表达式来计算。
2.如果表达式里只包含整数精确值,那么它会以bigint(64位)精度来计算。
3.如果表达式只包含精确值,但其中有的值带有小数部分,那么它会以具有65位精度的 
  decimal算法来进行计算。
4.在表达式里,如果存在字符串必须转化成一个数才能进行计算的情况,那么该字符串会被转化为一个双精度浮点值。

3.1.1.2位域值
位域值
位域值可以写成 b’ val ’ 或者 0b ’val’,其中val由一个或多个二进制数字(0或1)构成
在结果集里,bit值会被显示为一个二进制串,不过其输出格式并不太好,让它加上0或者使用cast()函数,可以将其转换为一个整数:

Select b’1001’ + 0 , cast (b’1001’ as unsigned )

+————+—————————+
| b’1001’+ 0 | cast(b’1001’ as unsigned) |
+————+—————————+
| 9 | 9 |
+————+—————————+

3.1.2字符串值

字符串两端的引号既可以是单引号也可以是双引号,但应尽量使用单引号。原因有二:

    1.SQL语言标准规定使用单引号,因此使用单引号字符串的语句,能够更好地一直到其它数据库引擎
    2.如果启用了SQL模式的ansi_quotes,那么MySQL会将双引号处理成将标识符引起来的符号,而不会把它只当成将字符串引起来的括号。也就是说,双引号里的值必须是数据库名或表名。

Select “last_name” from president;
若启用了该模式,词句将会从president表里选取last_name列的值。
若未启用,那么此句将为该表的每行选取一次字符串‘last_name’。

字符串中MySQL能够识别出字符串里用来代表特殊字符的转义序列,转义序列是以一个反斜线字符(\)开始,表示将要脱离常规的字符解释规则。

\0  NUL(零值字节)
\’  单引号   
\”  双引号
\b  退格符
\n  换行符
\r  回车符
\t  制表符
\\  反斜线
\z  Ctrl +Z(windows系统中的EOF字符)

1.NUL代表得到是零字节,NULL代表的是没有值
2.转义序列是区分大小写的 所有未列在表里的字符,即使前边有反斜线 也会被认为解释该
字符本身
3.可以使用反斜线序列来将单引号或者双引号转义,但实际上还有几种方法可以在字符串内
嵌入引号。

       1.嵌入的引号与字符串的引号相同,则重复两次即可:
          ‘  I  can’’ t  ’
          ‘  He said , “”I told you so “”   ’
       2.嵌入的引号与字符串的引号不相同,那么不用重复即可嵌入:
          “  I can’t  ”
       3.对嵌入的引号使用反斜线进行转义。
          ‘  I can \’ t  ’ 
          “  I can \’ t  ”

如果需要取消反斜线字符的特殊含义,并把它当做一个普通字符,那么请启用SQL的no_backslash_escapes模式

十六进制的两种记法:

1.使用标准的SQL记法 X’ val ’其中val是由1~9 和a~f(A~F)组成。(x和a~f都不区分大小写)

在字符串上下文中,每两个十六进制数打偶会被解释为一个8为数字字节值,取值范围是0~255,而其结果会被当成一个字符串
在数字上下文中,十六进制常量会被当成一个数。
下列语句展示了十六进制常量在两种上下文中的解释情况:
    Select   X’61626364’   ,   X’61626364’+0  ;
    +-------------+---------------+
    | X'61626364' | X'61626364'+0 |
    +-------------+---------------+
    | abcd        |    1633837924 |
    +-------------+---------------+

2.以”0x”开头,后面跟着一个或多个十六进制数字。前缀”0x”需要区分大小写。(x要小写)

select 0x61626364 ,0x61626364+0;
    +------------+--------------+
    | 0x61626364 | 0x61626364+0 |
    +------------+--------------+
    | abcd       |   1633837924 |
    +------------+--------------+

注意:X‘val’记住要求构成val的数字个数为偶数。
0x记法写的十六进制值只有奇数个十六进制数字时,MySQL会自动在前面加一个字符“0”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值