SQL中一个神奇的单引号引发的血案

今天领导叫我,给其他的领导开几个账号。但由于我们内网数据库的公网IP再也不开放,navicat再也用不了,那么俺只能冲向服务器去敲命令行。

群里俺的俩领导都等着,等着把领导的用户信息输入数据库。
在这里插入图片描述

然而当我自以为五分钟搞定,肯定能五分钟成功,啪啪啪瞬间敲下:

INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,…)

再填充这些values,敲出领导们的账号密码,密码该改MD5的MD5。

再把自以为在word里写得万无一失的命令复制粘贴进服务器的命令行里。


点下回车,Mysql竟然!!报错了!!!!!!:
在这里插入图片描述

(领导的名字我马赛克了我还想活)在这里插入图片描述

报错如下:
ERROR 1054(42S22): unknow column '插入的值’ in 'field list’
在这里插入图片描述
我:???这是什么错(后面深夜才回想起来,是自己在写值时,忘记加上单引号的时候,报过这个错)
在这里插入图片描述

navicat用得多了,表格里直接填就很爽。而之前用命令行也是大多调整表的属性,所以这我第一次正儿八经用命令行插入表数据。我真的菜。

在这里插入图片描述

于是紧张刺激之中,我一边安慰自己能搞定。Mysql 不能再 easy了,我可以的,一边求助万能的百度。

一百度,有人说是列名的编码错了,不是utf-8。

我一看,报错的那个值,领导的名字是中文的,有可能啊。

于是连忙赶去查看,其实我已经看过一万次的最初的建表语句,以为是最近表属性被谁改了:在这里插入图片描述

一查,就是utf-8啊,没改啊嘤嘤嘤
在这里插入图片描述

领导们都在等着要账号密码,好紧张刺激。

赶紧接着搜,发现有人说是自己在列名前面无意中加了个空格,所以报了这个错。

我心想,那我这报错的可是值啊,是领导的名字,不是列名。所以还是输入的值有问题吗?

在这里插入图片描述

又仔细看了看自己的各种空格,没错啊。于是我又试了试,一行命令,只插入一列的值。又试了试,将INSERT换成UPDATE方法。

而这些尝试,全都报:
ERROR 1054(42S22): unknow column '插入的第一个值’ in 'field list’


在这里插入图片描述

实在没辙了,百度下面也没啥有用信息。
我心想,那跑去navicat上面试一下看看会有没有不同的error log,死马当活马医吧。在这里插入图片描述

(虽然这个想法是我活在梦里,但navicat的确解决了这个问题)

一换navicat,我自己怕之前哪里写错了,又敲一遍命令行。在这里插入图片描述

幸亏我又敲了一遍!!!!

因为我发现,navicat里打出来的单引号和word里面打出来的单引号不一样!!!

navicat里面的单引号是直的单引号!!!!

它长这样:
在这里插入图片描述
word里的单引号是斜的!!!

它长这样:
在这里插入图片描述

我发誓这真的是【同一种】【英文的】输入法。但是word里敲出来复制进命令行就是和命令行、navicat直接敲出来的单引号长得不一样。

在这里插入图片描述

同样的,把他们复制去Mysql命令行里,他们也长得不一样!
在这里插入图片描述
我把领导名字截掉了,请注意看左右两边俺用红线标出来的单引号

换成直的单引号后,就很轻松地插入成功了。在这里插入图片描述

**

**

所以综上:

**
**

1.Mysql中,输入的单引号一定需要是直的单引号 (navicat敲,命令行里直接敲都是正确的,但如果从word里面复制就有可能会出现斜的双引号)

这是微软害我(不是在这里插入图片描述
**

**

2.如果出现 ERROR 1054(42S22): unknow column 'xxxx’ in ‘field list’ 一定是xxxx的位置上哪里输入错误了。有可能是输入值或者列名的格式错误(像我的错误一样),也有可能是数据库里根本没有这个你输入的命令行里中报错的,叫xxxx的这个列名的这个列(别的博主那里看到的问题)。

**

紧张刺激过后remind一下。
现在回过头去看博客发的第一张报错的图,其实也能看到图里,(我在下面用红色标出来的位置),领导名字两边这里,是有两对诡异的引号

其实最开始Mysql的报错就给了提示,但那时候可能因为我窗口开得太小,完全没有留意到这里有两对引号
在这里插入图片描述

这个错误真的太菜了。还好最后把建的两个账号在20分钟左右发过去了。

特别不好意思解释,为啥自己建个账号也会这么慢。
在这里插入图片描述

那么又想了想,已知数据库设定utf-8编码,word应该是unicode字符集格式。(utf8是对unicode字符集进行编码的一种编码方式。)

那么我把命令从word复制过去服务器端命令行后,应该是保留了unicode字符集格式,所以被设为utf-8编码格式的数据库自然是容易产生插入问题。

而他们占用的字节数都是完全不一样的
在这里插入图片描述

溜了溜了

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值