Mysql Sql语句空格字符串等问题

  • 1、问题描述
  • 2、总结


1、问题描述

Mysql 里面SQL语句空格、字符串问题,你发现不了,但是就是运行报错。不服?来我们上源码。先来看一个删除表的。

DROP TABLE IF EXISTS 'user';

sql server 第5个空格的位置 sql语句 空格_sql server 第5个空格的位置


堂堂正正删除表,没毛病,运行。

1 queries executed, 0 success, 1 errors, 0 warnings

查询:DROP TABLE IF EXISTS 'user'

错误代码: 1064
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 ''user'' at line 1

执行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0 sec

sql server 第5个空格的位置 sql语句 空格_字符串_02


什么鬼。这里user不能用字符串的引号。只能用mysql自带的引号。

DROP TABLE IF EXISTS `user`;

sql server 第5个空格的位置 sql语句 空格_mysql_03

对比下这两种写法在SQLYog中的效果。执行SQL语句。

1 queries executed, 1 success, 0 errors, 1 warnings

查询:DROP TABLE IF EXISTS `user`

共 0 行受到影响, 1 个警告

执行耗时   : 0 sec
传送时间   : 1.183 sec
总耗时      : 1.184 sec

注意:要查看所有警告的完整列表,请启用 工具 -> 首选项 -> 常规 -> 在信息选项卡下显示警告

sql server 第5个空格的位置 sql语句 空格_sql_04


再来个大招,关于空格的。

CREATE TABLE `role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

也是堂堂正正建立一个表。没毛病。执行SQL语句。

1 queries executed, 0 success, 1 errors, 0 warnings

查询:CREATE TABLE `role` (   `id` bigint(20) NOT NULL AUTO_INCREMENT,   `name` varchar(255) COLLATE utf8_bin NOT NULL...

错误代码: 1064
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 'CREATE TABLE `role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `n' at line 1

执行耗时   : 0 sec
传送时间   : 0 sec
总耗时      : 0 sec

sql server 第5个空格的位置 sql语句 空格_sql_05


我的个亲娘嘞!还有没有王法。是的就是空格的问题。我们拿到记事本过滤一下再拷贝回来执行SQL语句。

CREATE TABLE role(
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

大家肉眼看看和上面有什么区别,看出来的话,你是我大哥,我水土不服舅服你。执行SQL语句。

1 queries executed, 1 success, 0 errors, 0 warnings

查询:CREATE TABLE role( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) ) ...

共 0 行受到影响

执行耗时   : 0.027 sec
传送时间   : 1.171 sec
总耗时      : 1.199 sec

sql server 第5个空格的位置 sql语句 空格_mysql_06


看似一毛一样,竟然执行成功了。我们来看看SQLyog中两段代码的差别。

sql server 第5个空格的位置 sql语句 空格_mysql_07

确实空格不同,颜色也不同。接下来看看Navicat的,一毛一样,还是SQLyog好啊。

sql server 第5个空格的位置 sql语句 空格_数据库_08


遇到这样的问题想必各位会直接哭晕在厕所了。不说了,我刚刚醒。

2、总结

感谢各位前辈的辛勤付出,让我们少走了很多的弯路!

点个赞再走呗!欢迎留言哦!