MySQL里的引号特别多,单引号、双引号、反引号。双引号和反引号一般修饰表名、字段名,反引号可以防止因为表名或者字段名为MySQL的关键字导致的解析问题。而单引号是用来把值包起来的。
如果值里有单引号,那么输入单引号有两种方法:一、用两个单引号表示一个单引号,二、用斜杠加单引号来表示一个单引号。
insert into kv set item='name', value='I''am LiLei';
=> I'am LiLei
insert into kv set item='name', value='I\'am LiLei';
=> I'am LiLei
insert into kv set item='name', value='I''''am LiLei';
=> I''am LiLei
insert into kv set item='name', value='I\'\'am LiLei';
=> I''am LiLei
#值里有双引号是无所谓的
insert into kv set item='name', value='I"am LiLei';
=> I"am LiLei
如果你使用select查看表中数据,都OK,但是如果表结构的comment里有引号呢。如:
alter table kv modify "value" varbinary(4096) NOT NULL COMMENT '键值I''am LiLei';
使用show create table kv来查看,会发现却是两个单引号:
"value" varbinary(4096) NOT NULL COMMENT '键值I''am LiLei'
开始被这个弄懵了,后来才想明白,show create table查看的是建表的SQL语句,方便直接copy、paste、执行,所以理应是两个单引号。
特别注意:如果值用双引号,会被认为是对表中其他字段的引用,所以使用双引号来包值,会出现莫名其妙的错误:
[phabricator_herald]> UPDATE `herald_transcript` SET objectTranscript = "" WHERE garbageCollected = 0 LIMIT 100;
ERROR 1054 (42S22): Unknown column '' in 'field list'