热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

9.1.1字符串文字

字符串是包含在单引号(')或双引号()字符中的字节或字符序列。例子:sql'astring'anotherstring相邻放置的带引号的字符串连

字符串是包含在单引号 ( ') 或双引号 ( ") 字符中的字节或字符序列。例子:

'a string'
"another string"

相邻放置的带引号的字符串连接成一个字符串。以下几行是等效的:

'a string'
'a' ' ' 'string'

如果ANSI_QUOTES启用了SQL 模式,则字符串文字只能在单引号内引用,因为双引号内引用的字符串被解释为标识符。

甲二进制串是一个字节的字符串。每个二进制字符串都有一个名为binary. 一个 非二进制字符串是字符的字符串。它有一个不同于字符集的字符集 binary和一个与字符集兼容的排序规则。

对于这两种类型的字符串,比较都是基于字符串单元的数值。对于二进制字符串,单位是字节;比较使用数字字节值。对于非二进制字符串,单位为字符,部分字符集支持多字节字符;比较使用数字字符代码值。字符代码排序是字符串整理的函数。(有关更多信息,请参阅 第 10.8.5 节,“二进制排序规则与 _bin 排序规则的比较”。)

笔记

mysql客户端中,二进制字符串使用十六进制表示法显示,具体取决于--binary-as-hex. 有关该选项的更多信息,请参阅第 4.5.1 节,“mysql — MySQL 命令行客户端”。

字符串文字可能有一个可选的字符集介绍者和COLLATE子句,以将其指定为使用特定字符集和排序规则的字符串:

[_charset_name]'string' [COLLATE collation_name]

例子:

SELECT _latin1'string';
SELECT _binary'string';
SELECT _utf8'string' COLLATE utf8_danish_ci;

您可以使用 (或 ) 在国家字符集中创建字符串。这些语句是等效的: N'*literal*'``n'*literal*'

SELECT N'some text';
SELECT n'some text';
SELECT _utf8'some text';

有关这些形式的字符串语法的信息,请参阅 第 10.3.7 节“国家字符集”和 第 10.3.8 节“字符集介绍器”。

在字符串中,某些序列具有特殊含义,除非NO_BACKSLASH_ESCAPES启用了SQL 模式。这些序列中的每一个都以反斜杠 ( \)开头,称为转义字符。MySQL 识别表 9.1,“特殊字符转义序列”中显示的转义序列。对于所有其他转义序列,反斜杠将被忽略。也就是说,转义的字符被解释为好像它没有被转义。例如,\x只是x. 这些序列区分大小写。例如, \b被解释为退格,但 \B被解释为B. 根据character_set_connection系统变量指示的字符集进行转义处理 。即使对于前面有指示不同字符集的介绍人的字符串也是如此,如第 10.3.6 节“字符字符串文字字符集和排序规则”中所述。

表 9.1 特殊字符转义序列























































转义序列由序列表示的字符
\0一个 ASCII NUL ( X'00') 字符
\'单引号 ( ') 字符
\"双引号 ( ") 字符
\b退格字符
\n换行(换行)字符
\r一个回车符
\t一个制表符
\ZASCII 26 (Control+Z);见表后面的注释
\\反斜杠 ( \) 字符
\%一个%字符;见表后面的注释
\_一个_字符;见表后面的注释

可以将 ASCII 26 字符编码为\Z 使您能够解决 ASCII 26 代表 Windows 上的 END-OF-FILE 的问题。如果您尝试使用 .ASCII 文件中的 ASCII 26 会导致问题。 mysql *db_name* <*file_name*

\%\_序列用于搜索的文字实例%_其中它们否则会被解释为通配符在模式匹配上下文。请参阅第 12.8.1 节,“字符串比较函数和运算符”中的LIKE运算符 描述。如果您在模式匹配上下文之外使用 或,它们的计算结果为字符串 and ,而不是 and 。 \%``\_``\%``\_``%``_

有几种方法可以在字符串中包含引号字符:



  • '用 引用的字符串内的 A'可以写成 ''.

  • "用 引用的字符串内的 A"可以写成 "".

  • 在引号字符前面加上转义字符 ( \)。

  • 不需要特殊处理'的字符串内的 A"不需要加倍或转义。同理," 在用引号括起来的字符串内部'不需要特殊处理。

以下SELECT语句演示了引用和转义的工作方式:

mysql> SELECT &#x27;hello&#x27;, &#x27;"hello"&#x27;, &#x27;""hello""&#x27;, &#x27;hel&#x27;&#x27;lo&#x27;, &#x27;\&#x27;hello&#x27;;
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel&#x27;
lo | &#x27;hello |
+-------+---------+-----------+--------+--------+
mysql> SELECT "hello", "&#x27;
hello&#x27;", "&#x27;&#x27;hello&#x27;&#x27;", "hel""lo", "\"hello";
+-------+---------+-----------+--------+--------+
| hello | &#x27;
hello&#x27; | &#x27;&#x27;hello&#x27;&#x27; | hel"lo | "hello |
+-------+---------+-----------+--------+--------+
mysql> SELECT &#x27;
This\nIs\nFour\nLines&#x27;;
+--------------------+
| This
Is
Four
Lines |
+--------------------+
mysql> SELECT &#x27;
disappearing\ backslash&#x27;;
+------------------------+
| disappearing backslash |
+------------------------+

要将二进制数据插入到字符串列(例如 BLOB列)中,您应该用转义序列表示某些字符。必须对反斜杠 ( \) 和用于引用字符串的引号字符进行转义。在某些客户端环境中,可能还需要转义NUL或 Control+Z。在MySQL的客户端截断引用包含字符串的NUL字符,如果他们没能逃脱,并控制+ Z,可以采取档案结尾在Windows上,如果没有逃脱。对于代表这些字符中的每一个的转义序列,请 参见表 9.1,“特殊字符转义序列”。

在编写应用程序时,任何可能包含任何这些特殊字符的字符串都必须正确转义,然后才能将该字符串用作发送到 MySQL 服务器的 SQL 语句中的数据值。您可以通过两种方式执行此操作:



  • 使用转义特殊字符的函数处理字符串。在 C 程序中,您可以使用 mysql_real_escape_string_quote() C API 函数来转义字符。请参阅 mysql_real_escape_string_quote()。在构造其他 SQL 语句的 SQL 语句中,您可以使用该QUOTE()函数。Perl DBI 接口提供了quote 一种将特殊字符转换为正确转义序列的方法。请参阅第 29.9 节,“MySQL Perl API”。其他语言接口可能提供类似的功能。

  • 作为显式转义特殊字符的替代方法,许多 MySQL API 提供占位符功能,使您能够将特殊标记插入语句字符串,然后在发出语句时将数据值绑定到它们。在这种情况下,API 负责为您转义值中的特殊字符。



推荐阅读
author-avatar
手机用户2702936513
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有