MySql insert
语句中的反斜杠
比如,有一个表people
:
create table people(
id int not null auto_increment,
name varchar(100) not null,
age int,
primary key(id)
);
插入一条数据:
insert into people (name, age) values ('\John', 30);
查看结果:
ysql> insert into people (name, age) values ('\John', 30);
Query OK, 1 row affected (0.00 sec)
mysql> select * from people;
+----+------+------+
| id | name | age |
+----+------+------+
| 3 | John | 30 |
+----+------+------+
1 row in set (0.00 sec)
所以,如果字符串中包含反斜杠(’’),则需要再加一个反斜杠用来转义:
mysql> insert into people (name, age) values ('\\James', 33);
Query OK, 1 row affected (0.02 sec)
mysql> select * from people;
+----+--------+------+
| id | name | age |
+----+--------+------+
| 3 | John | 30 |
| 4 | \James | 33 |
+----+--------+------+
2 rows in set (0.00 sec)
在Java程序中,需要手动处理将一个反斜杠替换为两个反斜杠,使用String的replaceAll("\\\\", "\\\\\\\\")
方法:
public static void main(String[] args) {
String src = "\\a";
String des = src.replaceAll("\\\\", "\\\\\\\\");
System.out.println("src: " + src);
System.out.println("des: " + des);
}
由于函数replaceAll(String regex, String replacement)
的第一个参数regex
是正则表达式,所以这里有两次转义,第一次java程序将\\
转义成为\
;第二次正则再进行转义,所以,在java的正则表达式中,一个反斜杠\
需要用四个反斜杠来转义\\\\
。
在这里,我们将insert
语句中的一个反斜杠\
替换为两个反斜杠\\
,就对其进行了转义,就会保证插入的数据字符串中保持原有的反斜杠不变。