第三章 数据类型
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”。