mysql 关于命令行下,字符串间少逗号分隔符的坑

遇到一个 mysql 的坑,关于字符串连接的问题,分享一下

mysql> select * from my_table;
+----+--------+------------+
| id | mod_id | mod_name   |
+----+--------+------------+
|  1 |     20 | red        |
|  2 |     20 | blue       |
|  3 |     20 | pink       |
|  4 |     21 | yellow     |
|  5 |     21 | green      |
|  6 |     21 | white      |
|  7 |     21 | black      |
|  8 |     30 | gray       |
|  9 |     30 | purple     |
| 10 |     30 | pinkpurple |
| 11 |     30 | red purple |
+----+--------+------------+
11 rows in set (0.00 sec)

原始表数据。

mysql> select * from my_table where mod_name in ("red", ‘blue‘, ‘pink‘, ‘purple‘);
+----+--------+----------+
| id | mod_id | mod_name |
+----+--------+----------+
|  1 |     20 | red      |
|  2 |     20 | blue     |
|  3 |     20 | pink     |
|  9 |     30 | purple   |
+----+--------+----------+
4 rows in set (0.00 sec)

使用 where 条件查询匹配列表中的列。(正常查询)

mysql> select * from my_table where mod_name in ("red", ‘blue‘, ‘pink‘ ‘purple‘);
+----+--------+------------+
| id | mod_id | mod_name   |
+----+--------+------------+
|  1 |     20 | red        |
|  2 |     20 | blue       |
| 10 |     30 | pinkpurple |
+----+--------+------------+
3 rows in set (0.00 sec)

注意最后一组值,(‘pink‘ ‘purple‘) 中间少了个逗号,那么查询出来的结果,默认会解释为 ‘pinkpurple‘ 字符串。


mysql> select * from my_table where mod_name = (‘pink‘ ‘purple‘);
+----+--------+------------+
| id | mod_id | mod_name   |
+----+--------+------------+
| 10 |     30 | pinkpurple |
+----+--------+------------+
1 row in set (0.00 sec)
使用 = 符号条件精确查询,仍然解释为 两个字符串的连接结果。

mysql> select * from my_table where mod_name = ‘pink‘ ‘purple‘;
+----+--------+------------+
| id | mod_id | mod_name   |
+----+--------+------------+
| 10 |     30 | pinkpurple |
+----+--------+------------+
1 row in set (0.00 sec)
使用 = 符号条件精确查询,取消掉括弧,仍然解释为 两个字符串的连接结果。

mysql> select * from my_table where mod_name = ‘‘ ‘purple‘;
+----+--------+----------+
| id | mod_id | mod_name |
+----+--------+----------+
|  9 |     30 | purple   |
+----+--------+----------+
1 row in set (0.00 sec)
头一个字符串为0长度字符串,那么合并即等于 purple 字符串。

mysql> select * from my_table where mod_name = ‘red‘‘ ‘ ‘purple‘;
Empty set (0.00 sec)
写三个字符串,其中第一个字符串的单引号和第二个字符串的单引号中间没有空格,那么解释为未知字符。。。。。

mysql> select * from my_table where mod_name = ‘red‘ ‘ ‘ ‘purple‘;
+----+--------+------------+
| id | mod_id | mod_name   |
+----+--------+------------+
| 11 |     30 | red purple |
+----+--------+------------+
1 row in set (0.00 sec)
 ‘red‘ ‘ ‘ ‘purple‘ ,每一组字符串用空格隔开,那么就合并为   red purple 字符串。

本来,这应该报语法错误的,但是,,,,,
唉,被坑了,,,,

原文地址:http://blog.51cto.com/professor/2093120

时间: 2024-08-15 11:59:12

mysql 关于命令行下,字符串间少逗号分隔符的坑的相关文章

MySQL在命令行下的使用

1.Mac下MySQL的安装:http://my.oschina.net/joanfen/blog/171109 2.在使用MySQL之前要确保"系统编号设置"中的MySQL服务是打开的 3.打开"终端",输入"mysql -uroot -p",并输入安装时自己定义的密码 4.基本操作语句 (1)show databases; (显示所有数据库) (2)use pkusz; (使用某个数据库,pkusz是我的一个数据库名字) (3)show ta

mysql命令行下创建和删除索引简介

mysql命令行下创建和删除索引简介: mysql中创建索引可以使用CREATE TABLE语句,也可以用CREATE INDEX或ALTER TABLE来给表增加索引.索引的删除可以使用ALTER TABLE或DROP INDEX语句来实现. (1)使用ALTER TABLE语句创建索引.语法如下:alter table table_name add index index_name (column_list) ;alter table table_name add unique (colum

MySQL命令行下执行.sql脚本详解

本文主要介绍一个在MySQL命令行下执行脚本文件的例子,通过这个例子让我们来了解一下在命令行下MySQL是怎样执行脚本的吧.现在我们开始介绍这一过程. 1.首先编写sql脚本,保存为的:book.sql,内容如下: 1 use test; 2 3 create table book 4 5 ( 6 7 tisbn varchar(20) primary key, 8 9 tbname varchar(100), 10 11 tauthor varchar(30), 12 13 chubanshe

Mysql常用命令行大全——转载

转载地址:http://www.blogjava.net/supperchen/archive/2012/10/11/389340.html 第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是: mysql> 注意,如果是连接到另外的机器上,则

Linux命令行下编辑常用的快捷键

Linux命令行编辑快捷键: history                                   显示命令历史列表 ↑(Ctrl+p)                               显示上一条命令 ↓(Ctrl+n)                               显示下一条命令 !num                                     执行命令历史列表的第num条命令 !!                            

Linux命令行下的快捷键

1. 命令行下的快捷键 经常在命令行下工作的同志们,可能用的最多的就是两个上下键,主要用来调出历史命令:使用左右箭头使光标向后或向前移动以修改上次使用过的命令.其实这样做效率并不是很高,有了快捷键可以让我们的效率有所提高,而且看起来还更专业.更加Awesome.更加Geek.掌握了这些快捷键,我们可以做到手不离主键盘区域,完全可以忽略掉键盘上的四个可爱的箭头.当我们熟练之后,会越发喜欢这种方式. 1.1 常用快捷键介绍 下面介绍一些作者在命令行下经常使用的快捷键,这些快捷键在Emacs下面是有同

JNI之——在cmd命令行下编译执行C/C++源文件

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46604269 一直用java来敲代码,java配置好jre路径之后.在cmd下编译执行.非常方便. 刚好要给一个舍友改下C程序,想到可不能够像java一样在环境变量里配置好C的编译路径呢? 于是上网搜了一下,得到例如以下结果: 一.假设装有VC,那就简单了,由于VC带有C的编译器,能够将此路径设置进环境变量. Windows系统下编译连接源码方法: cl -GX test.c -

在CMD命令行下关闭进程的命令

转载: [重要]在CMD命令行下关闭进程的命令━━━━━━━━━━━━━━━━━━━━━━━━━━ 方法一: 在"运行"中输入:ntsd -c q -pn 程序名字(在MS-Dos中的作用是一样的) 方法二: ntsd使用以下参数杀死进程.c:\>ntsd -c q -p PID 只要你能提供进程的PID,那么你就可以干掉进程. 法二: tskill命令 这个命令与tasklist命令是相对应的吧! tasklist命令是显示有哪些进程正在运行! tskill命令是关闭运行中的进

Linux命令行下的vim文本编辑器

Linux命令行下的vim文本编辑器 vim文本编辑器是一个非常强大的工具,可以做很多事情,比如新建文件,打开文件,编辑文件,保存文件,同时打开多个文件等.下面总结一些常用的vim 编辑器命令: 1. 进入vim编辑器的方式:(进入vim编辑器时,默认的模式是“命令模式”) 在终端输入 vi:进入vim编辑器 vi filename:进入vim编辑器,新建了一个filename文件,光标定位到文件的第一行 vi在工作时,会在当前目录下创建.swp的临时文件,该临时文件也称为交换文件 当vi结束对