文章目录
- 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)


















