• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • 字符串

    字符串是由单引号(')或双引号(")字符引起的字节或字符序列。例子:

    'a string'
    "another string"
    

    彼此相邻的带引号的字符串被串联为单个字符串。以下几行是等效的:

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

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

    甲二进制串是一个字节的字符串。每个二进制字符串都有一个字符集和一个名为的排序规则binary。一个非二进制字符串是字符的字符串。它具有除以外的字符集binary以及与该字符集兼容的排序规则。

    对于这两种类型的字符串,比较都是基于字符串单位的数值进行的。对于二进制字符串,单位是字节。比较使用数字字节值。对于非二进制字符串,单位是字符,某些字符集支持多字节字符。比较使用数字字符代码值。字符代码排序是字符串排序规则的函数。(有关更多信息,请参见“与_bin相比的二进制校验”)。

    字符串文字可能具有可选的字符集介绍程序和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';
    

    有关这些形式的字符串语法的信息,请参见“国家字符集”和“字符集介绍者”。

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

    表9.1特殊字符转义序列

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

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

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

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

    • 一个'带引号的字符串中'可以写成''
    • 一个"带引号的字符串中"可以写成""
    • 在引号前面加上转义字符(\)。
    • 一个'字符串中引述"不需要特殊对待而且不必增加一倍或逃脱。同样,"在带引号的字符串内部'不需要特殊处理。

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

    mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
    +-------	+---------	+-----------	+--------	+--------	+
    | hello 	| "hello" 	| ""hello"" 	| hel'lo 	| 'hello 	|
    +-------	+---------	+-----------	+--------	+--------	+
    
    mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
    +-------	+---------	+-----------	+--------	+--------	+
    | hello 	| 'hello' 	| ''hello'' 	| hel"lo 	| "hello 	|
    +-------	+---------	+-----------	+--------	+--------	+
    
    mysql> SELECT 'This\nIs\nFour\nLines';
    +--------------------	+
    | This
    Is
    Four
    Lines |
    +--------------------	+
    
    mysql> SELECT 'disappearing\ backslash';
    +------------------------	+
    | 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一种将特殊字符转换为适当的转义序列的方法。请参见“ MySQL Perl API”。其他语言界面可以提供类似的功能。
    • 作为显式转义特殊字符的替代方法,许多MySQL API提供了占位符功能,使您可以在语句字符串中插入特殊标记,然后在发出语句时将数据值绑定到它们。在这种情况下,API会为您转义值中的特殊字符。

    下篇:数值