字符串是多个字符组成的一个字符序列,由单引号(“'”) 或双引号 (“”) 字符包围。(但在 ansi 模式中运行时只能用单引号)。
例如:
'a string'
another string
在一个字符串中,如果某个序列具有特殊的含义,每个序列以反斜线符号 (“/”)开头,称为转义字符。 mysql 识别下列转义字符:
/0
一个 ascii 0 (nul) 字符。
/'
一个 ascii 39 单引号 (“'”) 字符。
/
一个 ascii 34 双引号 (“”) 字符。
/b
一个 ascii 8 退格符。
/n
一个 ascii 10 换行符。
/r
一个 ascii 13 回车符。
/t
一个 ascii 9 制表符(tab)。
/z
ascii(26) (control-z)。这个字符可以处理在 windows 系统中 ascii(26) 代表一个文件的结束的问题。(当使用 mysql database //
一个 ascii 92 反斜线 (“/”) 字符。
/%
一个 ascii 37 “%” 字符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符。查看章节 6.3.2.1 字符串比较函数。
/_
一个 ascii 95 “_” 字符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符。查看章节 6.3.2.1 字符串比较函数.
注意如果在某些正文环境内使用 “/%” 或 “/_”,将返回字符串 “/%” 和 “/_” 而不是 “%” 和 “_”。
字符串中包含引号的可以有下列几种写法:
一个字符串用单引号“'”来引用的,该字符串中的单引号“'”字符可以用“''”方式转义。
一个字符串用双引号“”来引用的,该字符串中的“”字符可以用“”方式转义。
你也可以继续使用在引号前加一个转义字符“/”来转义的方式。
一个字符串用双引号“”来引用的,该字符串中的单引号“'”不需要特殊对待而且不必被重复或转义。同理,一个字符串用单引号“'”来引用的,该字符串中的双引号“”不需要特殊对待而且不必被重复或转义。
下面显示的 select 演示引号和转义是如何工作:
mysql> select 'hello', 'hello', 'hello', 'hel''lo', '/'hello';
+-------+---------+-----------+--------+--------+
| hello | hello | hello | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+
mysql> select hello, 'hello', ''hello'', hello, /hello;
+-------+---------+-----------+--------+--------+
| hello | 'hello' | ''hello'' | hello | hello |
+-------+---------+-----------+--------+--------+
mysql> select this/nis/nfour/nlines;
+--------------------+
| this
is
four
lines |
+--------------------+
如果你想要把二进制数据插入到一个字符类型的字段中(例如blob),下列字符必须由转义序列表示:
nul
ascii 0,你应该用 “/0”(一个反斜线和一个ascii “0”字符)表示它。
/
ascii 92,反斜线。需要用 “//” 表示。
'
ascii 39,单引号。需要用 “/'” 表示。
ascii 34,双引号。需要用 “/” 表示。
如果你写 c 代码,你可以使用 c api 函数mysql_real_escape_string() 来为 insert 语句转义字符。查看章节 8.1.2 c api 函数概述。在 perl 中,你可以使用 dbi 包中的 quote 方法来将这些特殊字符转换成适当的转义序列。查看章节 8.5.2 dbi 接口。
你应该在任何可能包含上述特殊字符的字符串中使用转义函数!
另外,很多 mysql api 提供了一些占位符处理能力,这允许你在查询语句中插入特殊标记,然后在执行查询时对它们绑定数据值。这样,api 会自动为你从数值中转换它们