文章目录
- 1. 复现错误
- 2. 分析错误
- 3. 解决问题
- 4. \G和\g的区别
1. 复现错误
今天使用powershell
连接数据库后,执行如下SQL
语句:
mysql> select * from student where id =39 \G;
虽然成功查询除了数据,但报出如下错误的信息:
mysql> select * from student where id =39 \G;
*************************** 1. row ***************************
id: 39
name: 上官婉儿
no: 2023112345
address: 王者荣耀法师阵营
head_image: »?ÿ倨p賗謻p?几 T\灖 u5ë-;┾遙·ÿ ß槆Geo竳â/?PIen%葖î
娛遖>DYÎ>酄¾ 9?曝ã6ñª
媾叿ÿ 桉u? 岜盾砚臊罬鱂暤暩"忇r亠胞稛鸑xP诒¶2墸惵vo]*q詛W煂^岙?胼³?_0捁钔搀?bT烰闕X趲梡鉑寄?矃o檣t"珪獨贇篕裴_¿2贌 K湘繇P杝O)
1 row in set (0.00 sec)
ERROR:
No query specified
即No query specified
。
2. 分析错误
首先,我们需要了解\G
的作用,可以通过\h
命令来查询:
从图中的红框可知,\G
表示Send command to mysql server, display result vertically.
,即为如下功能:
-
Send command to mysql server
表示向mysql
服务器发送一条命令,这个命令是结束
的命令,等同于;
。 -
display result vertically
表示垂直展示SQL
。
\G
既然表示结束SQL
语句,那么:
select * from student where id =39 \G;
就相当于:
select * from student where id =39 ;;
-
第一个
;
的前面有一个查询,正常给出结果; -
第二个
;
的前面什么都没有,Send command to mysql server
后,会抛出一个ERROR
提示:No query specified(没有指定查询)
。
当然,这种对我们日常操作没有太大影响,不用过分担心。
但是,对于严谨的程序工程师,遇到这样ERROR
的错误提示信息,心里总是会感到有点慌。
3. 解决问题
既然\G
和;
都代表一条SQL
语句的结束,我们把;
去掉即可,如下代码所示:
mysql> select * from student where id = 39 \G
*************************** 1. row ***************************
id: 39
name: 上官婉儿
no: 2023112345
address: 王者荣耀法师阵营
head_image: »?ÿ倨p賗謻p?几 T\灖 u5ë-;┾遙·ÿ ß槆Geo竳â/?PIen%葖î
娛遖>DYÎ>酄¾ 9?曝ã6ñª
媾叿ÿ 桉u? 岜盾砚臊罬鱂暤暩"忇r亠胞稛鸑xP诒¶2墸惵vo]*q詛W煂^岙?胼³?_0捁钔搀?bT烰闕X趲梡鉑寄?矃o檣t"珪獨贇篕裴_¿2贌 K湘繇P杝O)
1 row in set (0.00 sec)
如此,便不再抛出异常了。
4. \G和\g的区别
有时,我们也会使用到\g
,那么,它和\G
有什么区别呢?
\g
只表示Send command to mysql server
,并没有垂直展示的意思。
当然,\g
也等于;
,即向MySQL
服务发送结束语句的命令。
而\G
除了结束语句外,还有垂直展示的概念:
mysql> show create table student \G
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`no` varchar(50) NOT NULL,
`address` text,
`head_image` blob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)