mysql中的单引号/小数点/字符转换为数字/警告信息
我们准备玩点有趣的:
select 一个数字:
mysql> select 1 from mysql.user;
+---+
| 1 |
+---+
| 1 |
| 1 |
| 1 |
+---+
3 rows in set (0.00 sec) mysql>
select 一个字符串:
mysql> select 'perl6' from mysql.user;
+-------+
| perl6 |
+-------+
| perl6 |
| perl6 |
| perl6 |
+-------+
3 rows in set (0.00 sec) mysql>
这个字符串单/双引号是一样的, 我们可以去掉空格:
mysql> select'perl6'from mysql.user;
+-------+
| perl6 |
+-------+
| perl6 |
| perl6 |
| perl6 |
+-------+
3 rows in set (0.00 sec) mysql>
可以看到正常执行。
那数字行不行呢?
mysql> select888from mysql.user;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'select888from mysql.user' at line 1
mysql>
不行, 那我们再select一个浮点型看看:
mysql> select 0.8 from mysql.user;
+-----+
| 0.8 |
+-----+
| 0.8 |
| 0.8 |
| 0.8 |
+-----+
3 rows in set (0.00 sec) mysql>
小数点前后如果是0, 可以不写:
mysql> select 1. from mysql.user;
+----+
| 1. |
+----+
| 1 |
| 1 |
| 1 |
+----+
3 rows in set (0.00 sec) mysql> select .6 from mysql.user;
+-----+
| .6 |
+-----+
| 0.6 |
| 0.6 |
| 0.6 |
+-----+
3 rows in set (0.00 sec) mysql>
如果是浮点型的话, 我们就可以让这个数字跟后面的关链字连在一起了:
mysql> select.6 from mysql.user;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'select.6 from mysql.user' at line 1
mysql> select .6from mysql.user;
+-----+
| .6 |
+-----+
| 0.6 |
| 0.6 |
| 0.6 |
+-----+
3 rows in set (0.00 sec) mysql>
.0就相当于0.0了, 可以这样写:
mysql> select 0.0 from mysql.user;
+-----+
| 0.0 |
+-----+
| 0.0 |
| 0.0 |
| 0.0 |
+-----+
3 rows in set (0.00 sec) mysql> select .0from mysql.user;
+-----+
| .0 |
+-----+
| 0.0 |
| 0.0 |
| 0.0 |
+-----+
3 rows in set (0.00 sec) mysql>
很好玩吧。
我们再看看别名:
mysql> select 'perl6' as P from mysql.user;
+-------+
| P |
+-------+
| perl6 |
| perl6 |
| perl6 |
+-------+
3 rows in set (0.00 sec) mysql>
as可省略:
mysql> select 'perl6' P from mysql.user;
+-------+
| P |
+-------+
| perl6 |
| perl6 |
| perl6 |
+-------+
3 rows in set (0.00 sec) mysql>
省略后可写在一起:
mysql> select'perl6'P from mysql.user;
+-------+
| P |
+-------+
| perl6 |
| perl6 |
| perl6 |
+-------+
3 rows in set (0.01 sec) mysql>
那数字能不能起别名呢?也可以:
mysql> select 1 as 'perl6' from mysql.user;
+-------+
| perl6 |
+-------+
| 1 |
| 1 |
| 1 |
+-------+
3 rows in set (0.00 sec) mysql>
结合前面的浮点型与省略as, 可以这样写:
mysql> select .0'perl6'from mysql.user;
+-------+
| perl6 |
+-------+
| 0.0 |
| 0.0 |
| 0.0 |
+-------+
3 rows in set (0.00 sec) mysql>
我们用union select 再看看:
mysql> select .0from mysql.user union select .01;
+------+
| .0 |
+------+
| 0.00 |
| 0.01 |
+------+
2 rows in set (0.00 sec) mysql>
加个条件:
mysql> select .0from mysql.user where user='root' union select .01;
+------+
| .0 |
+------+
| 0.00 |
| 0.01 |
+------+
2 rows in set (0.00 sec) mysql>
再改改:
mysql> select .0from mysql.user where 1. union select 'perl6';
+-------+
| .0 |
+-------+
| 0.0 |
| perl6 |
+-------+
2 rows in set (0.00 sec) mysql>
小数点数字可以跟后面关链字连起来的, 上面说了, 所以, 我们还可以这样:
mysql> select .0from mysql.user where .1union select'perl6';
+-------+
| .0 |
+-------+
| perl6 |
+-------+
1 row in set (0.00 sec) mysql>
0.开头的小数点会转化为整数, 都转为0。
除了where, 还有一个类似的, 叫做having:
mysql> select .0from mysql.user having .0union select'perl6';
+-------+
| .0 |
+-------+
| perl6 |
+-------+
1 row in set (0.00 sec) mysql>
where 跟having可以一起用:
mysql> select .0from mysql.user where .0 having 1 union select'perl6';
+-------+
| .0 |
+-------+
| perl6 |
+-------+
1 row in set (0.00 sec) mysql> select .0from mysql.user where 1.0 having 1 union select'perl6';
+-------+
| .0 |
+-------+
| 0.0 |
| perl6 |
+-------+
2 rows in set (0.00 sec) mysql>
where跟having一起时, 逻辑是从左到右, 先执行前面的where, 再执行后面的having。
但是having只能跟在where后面。
而且你也不能这么写: (select user from mysql.user where user='root' where user='root')
除了where/having类似外, 还有类似的:
union select
union distinct select
union all select
最后我们来看一下字符串转换为数字:
mysql> select 'a'+1;
+-------+
| 'a'+1 |
+-------+
| 1 |
+-------+
1 row in set, 1 warning (0.00 sec) mysql>
'a'转换为0, 相加结果是1。
提示有警告, 可以用如下命令查看信息:
mysql> select 'a'+1;
+-------+
| 'a'+1 |
+-------+
| 1 |
+-------+
1 row in set, 1 warning (0.00 sec) mysql> show warnings;
+---------+------+---------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
+---------+------+---------------------------------------+
1 row in set (0.00 sec) mysql>
字符串会被转换为数字, 如果能转换, 就转换为相应的数字, 不能转换就转换为0
mysql> select '1a'+1;
+--------+
| '1a'+1 |
+--------+
| 2 |
+--------+
1 row in set, 1 warning (0.00 sec) mysql> select 'a1'+1;
+--------+
| 'a1'+1 |
+--------+
| 1 |
+--------+
1 row in set, 1 warning (0.02 sec) mysql> select ''+1;
+---------+
| ''+1 |
+---------+
| 124 |
+---------+
1 row in set (0.00 sec) mysql>
我们可以连着一起写:
mysql> select'per16'+.1'test';
+------+
| test |
+------+
| 0.1 |
+------+
1 row in set, 1 warning (0.00 sec) mysql>
最后再来看点好玩的:
mysql> select host from mysql.user;
+-----------+
| host |
+-----------+
| 127.0.0.1 |
| ::1 |
| localhost |
+-----------+
3 rows in set (0.00 sec) mysql> select host from mysql.user where password='a'+'a';
+-----------+
| host |
+-----------+
| localhost |
| 127.0.0.1 |
| ::1 |
+-----------+
3 rows in set, 5 warnings (0.00 sec) mysql> show warnings;
+---------+------+-------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
| Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
| Warning | 1292 | Truncated incorrect DOUBLE value: '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' |
| Warning | 1292 | Truncated incorrect DOUBLE value: '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' |
+---------+------+-------------------------------------------------------------------------------+
5 rows in set (0.00 sec) mysql>
password='a'+'a', 字符串'a'转换成数字(因为有个 + 号), 会发生警告信息, 信息中包含用户的密码。
password='a'+'a', 会被转化为整数类型的表达式, 像 2=1+1
看下面的例子:
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec) mysql> select user()+'';
+-----------+
| user()+'' |
+-----------+
| 0 |
+-----------+
1 row in set (0.00 sec) mysql> select user()=''+'';
+--------------+
| user()=''+'' |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec) mysql> select user()=''+'';
+---------------+
| user()=''+'' |
+---------------+
| 0 |
+---------------+
1 row in set (0.00 sec) mysql>
本身user()是字符串的, 遇到了左边的 两个字符串相加, 所以右边的user()也将会自动转换为数值类型。
mysql中的单引号/小数点/字符转换为数字/警告信息的更多相关文章
- 字符串怎么换行 || 字符串中使用单引号时应该怎么写 || 保留两位小数 || 数字0在if中的意思是false || 什么情况下会会报undefined || null和undefined的区别 ||
换行的字符串 "This string\nhas two lines" 字符串中使用单引号时应该怎么写 'You\'re right, it can\'t be a quote' ...
- 关于Mysql查询带单引号及插入带单引号字符串问题
1.转为带参数查询 String sql=""select id from student where name='?'; Connection connect = DriverM ...
- js、html中的单引号、双引号及其转义使用
js.html中的单引号.双引号及其转义使用在js中对相关字符做判断或取值的时候很多情况下都会用到这些. ------ 在一个网页中的按钮,写onclick事件的处理代码,不小心写成如下:<in ...
- php中的单引号与双引号详解
一.引号定义字符串 在Php中,通常一个字符串被定义在一对引号中,如: 'I am a string in single quotes'"I am a string in double qu ...
- JS 和 HTML 中的单引号与双引号
JS中的单引号与双引号 HTML中的单引号与双引号很简单,就是两个字符实体: 显示 描述 实体名称 实体编号 " 双引号.引号 " " ' 单引号.撇号 &apo ...
- javaScript中的单引号与双引号
javaScript中的单引号与双引号没有什么区别.但因为xhtml规范要求所有xhtml属性要用双引号括起来.所以在javaScript中使用单引号. var html = '<h2 clas ...
- mysql中实现行号,oracle中的rowid
mysql中实现行号需要用到MYSQL的变量,因为MySql木有rownumber. MYSQL中变量定义可以用 set @var=0 或 set @var:=0 可以用=或:=都可以,但是如果变量用 ...
- Oracle中的单引号问题
SELECT '<a href="javascript:void(0)" onclick="openWyl('''||a.aac001 FROM ac01 a; S ...
- [转载]mysql中实现行号,oracle中的rowid
mysql中实现行号需要用到MYSQL的变量,因为MySql木有rownumber. MYSQL中变量定义可以用 set @var=0 或 set @var:=0 可以用=或:=都可以,但是如果变量用 ...
随机推荐
- [转]Windows 7 蓝屏后获取 MEMORY.DMP 文件及注意事项
转自:http://hi.baidu.com/guicomeon/item/d6753a177fc76f0f8fbde46a 系统默认会在 C:\Windows 目录下创建 MEMORY.DMP 文件 ...
- C# Designer.cs
designer.cs 是窗体设计器生成的代码文件,作用是对窗体上的控件做初始化工作(在函数InitializeComponent()中) VS2003以前都把这部分代码放到窗体的cs文件中,由于这部 ...
- Kubernetes初探 :总体概述及使用示例
Kubernetes是Google开源的容器集群管理系统.它构建于docker技术之上,为容器化的应用提供资源调度.部署运行.服务发现.扩容缩容等整一套功能,本质上可看作是基于容器技术的mini-Pa ...
- bzoj4760[USACO2017 Jan]Hoof,Paper,Scissors
题意:玩n次剪刀石头布,对方每次出什么已经知道了.你出的招数必须是连续的几段(不能超过k+1段),问你最多赢几次.(n<=100000,k<=20) 正常做法:f[i][j][k]表示前i ...
- 【bzoj2318】Spoj4060 game with probability Problem 概率dp
题目描述 Alice和Bob在玩一个游戏.有n个石子在这里,Alice和Bob轮流投掷硬币,如果正面朝上,则从n个石子中取出一个石子,否则不做任何事.取到最后一颗石子的人胜利.Alice在投掷硬币时有 ...
- Luogu1092 NOIP2004虫食算(搜索+高斯消元)
暴力枚举每一位是否进位,然后就可以高斯消元解出方程了.然而复杂度是O(2nn3),相当不靠谱. 考虑优化.注意到某一位进位情况的变化只会影响到方程的常数项,于是可以在最开始做一次高斯消元算出每个未知数 ...
- P1955 [NOI2015]程序自动分析
题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变 ...
- 【题解】Atcoder ARC#83 E-Bichrome Tree
哈哈~自己做出来的E题!(虽然这题被机房大佬强D极水).最开始神经错乱,写了个完全不对的贪心,竟然只错了4个点(。•ˇ‸ˇ•。) 可以发现,一个节点的子树内部和他颜色相同的节点权值和 是固定的,那么不 ...
- POJ1389:Area of Simple Polygons——扫描线线段树题解+全套代码注释
http://poj.org/problem?id=1389 题面描述在二维xy平面中有N,1 <= N <= 1,000个矩形.矩形的四边是水平或垂直线段.矩形由左下角和右上角的点定义. ...
- BZOJ1202 [HNOI2005]狡猾的商人 【并查集】
1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4180 Solved: 2015 [Submit][S ...