阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL列名中包含斜杠或者空格的处理方法

131次阅读
没有评论

共计 1519 个字符,预计需要花费 4 分钟才能阅读完成。

今天客户那边遇到了一个比较奇葩的问题跑来问我,这个问题比较冷门,所以特别记录下。

问题描述

数据库的字段存在斜杠或者空格的时候,怎么用 sql 进行 insert 或者 select 操作。

问题解答

对于这种特殊字符,我们一般想到的是用转义符进行处理,所以试了下 ”/”、引号、单引号等常见的转义符,发现依然语法错误,又查了下 MySQL 的官方说明:
特殊字符位于列名中时必须进行转义,如果列名中包含 \t,(,),/,\,=,<,>,+,-,*,^,”,’,[,],~,#,|,&,% 则必须用中括号括起来。eg:列名为 Column#,应写为 [Column#];列名包括中括号,必须使用斜杠进行转义,eg:列名为 Column[] 的列应写为[Column[\]](只有第二个中括号必须转义)。

以中括号的形式进行转义,然后又试了下中括号,发现依然还是不行。

通过搜索,最后找到需要以反引号“`”(一般键盘的左上角数字 1 左边的那个键)来处理。

其它反引号的用法

之前对反引号几乎没有使用过,所以借此机会搜索总结了下反引号相关的用法。

Linux 反引号的作用

特殊的赋值
Shell 中可以将数字或字符直接赋予变量,也可以将 Linux 命令的执行结果赋予变量,如下:

(1) $ count=9 #将数字赋予变量 count

(2) $ name=”ming” #将字符赋予变量 name

(3) $ listc=`ls -la` #将 Linux 命令赋予 listc,listc 的值就是该命令的执行结果

反引号的作用
 反引号的作用就是将反引号内的 Linux 命令先执行,然后将执行结果赋予变量。尽管可以通过输入字符或者字符串来创建变量值,也可以获取来自于其他 Linux 命令的值。为把 Linux 命令的结果赋予变量,实现需要执行这个命令。如果在命令行上把 Linux 命令放在反引号中,这个命令会首先被执行,其结果会成为命令行的一个参数。在赋值时,通过把命令放在反引号中,以便于首先执行,命令的执行结果会被赋予一个变量。反引号可以被视为由要执行命令组成的表达式,其结果会被赋予变量。组成命令的字符本身不会被赋予。在下面的范例中,命令 ls .c 被执行,其结果然后被赋予变量 listc。ls .c 会生成具有.c 扩展名的所有文件列表。这个文件列表随后被赋予变量 listc。

总结

反引号里面的字符串必须是能执行的命令,否则会出错;它的作用是命令替换,将其中的字符串当成 Shell 命令执行,返回命令的执行结果。

mysql 中反引号的作用

为了区分 MYSQL 的保留字与普通字符而引入的符号

举个例子:SELECT `select` FROM `test` WHERE select=’ 字段值 ’
在 test 表中,有个 select 字段,如果不用反引号,MYSQL 将把 select 视为保留字而导致出错,所以,有 MYSQL 保留字作为字段的,必须加上反引号来区分。

引号一般用在字段的值, 如果字段值是字符或字符串,则要加引号,如:select=’ 字段值 ’
不加反引号建的表不能包含 MYSQL 保留字,否则出错

反引号 `,数字 1 左边的符号
 保留字不能用于表名,比如 desc,此时需要加入反引号来区别,但使用表名时可忽略反引号。
create table desc 报错
create table `desc` 成功
create table `test` 成功
drop table test 成功

保留字不能用于字段名,比如 desc,此时也需要加入反引号,并且 insert 等使用时也要加上反引号。
create table `test`(`desc` varchar(255))成功
insert into test(desc) values(‘fxf’) 失败
insert into test(`desc`) values(‘fxf’) 成功

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计1519字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中