登录
首页 >  数据库 >  MySQL

MySQL™ 参考手册(字面值)

来源:SegmentFault

时间:2023-02-24 12:44:34 411浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《MySQL™ 参考手册(字面值)》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

字面值

本节描述如何在MySQL中编写字面值,这些参数包括字符串、数字、十六进制和位值、布尔值和

NULL
,本节还将介绍在MySQL中处理这些基本类型时可能遇到的各种细微差别。

字符串字面值

字符串是一个字节或字符序列,包含在单引号(

'
)或双引号(
"
)字符中,例如:

'a string'
"another string"

相互相邻的引用字符串连接为单个字符串,下列行是等价的:

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

如果启用了

ANSI_QUOTES
SQL模式,字符串字面值只能用单引号括起来,因为双引号括起来的字符串被解释为标识符。

二进制字符串是由字节组成的字符串,每个二进制字符串都有一个名为

binary
的字符集和排序规则。非二进制字符串是一串字符,它有一个非二进制的字符集和一个与字符集兼容的排序规则。

对于这两种类型的字符串,都基于字符串单元的数值比较,对于二进制字符串,单位是字节,使用数值字节值比较。对于非二进制字符串,单位是字符,有些字符集支持多字节字符,使用数字字符码值比较,字符码排序是字符串排序的函数。

字符串字面值可以有一个可选的字符集导入器和

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识别下表中所示的转义序列,对于所有其他转义序列,将忽略反斜杠,也就是说,转义字符被解释为没有转义,例如,
\x
就是
x
。这些序列是区分大小写的,例如,
\b
被解释为退格,但是
\B
被解释为
B
,转义处理是根据
character_set_connection
系统变量所表示的字符集来完成的,即使对于前面有一个表示不同字符集的导入器的字符串也是如此。
转义序列 序列表示字符
\0
ASCII NUL(
X'00'
)字符
\'
单引号(
'
)字符
\"
双引号(
"
)字符
\b
退格字符
\n
换行字符
\r
回车字符
\t
制表符
\Z
ASCII 26(Control+Z)
\\
反斜杠(
\
)字符
\%
%字符
\_
_
字符

ASCII 26字符可以编码为

\Z
,以使你能够解决ASCII 26在Windows上代表文件结束的问题,如果试图使用
mysql db_name ,文件中的ASCII 26会导致问题。

\%
\_
序列用于在模式匹配上下文中搜索
%
_
的文本实例,否则它们将被解释为通配符,如果在模式匹配上下文之外使用
\%
\_
,它们的值是字符串
\%
\_
,而不是
%
_

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

  • 在字符串内加上引号
    '
    可以写成
    ''
  • 在字符串内加上双引号
    "
    可以写成
    ""
  • 在引用字符之前加上转义字符(
    \
    )。
  • "
    字符串内部加上
    '
    不需要特殊处理’,也不需要重复或转义,同样的道理,在
    '
    字符串内部加上
    "
    不需要特殊处理’。

下面的

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
字符的引用字符串,如果没有转义,Windows上的文件末尾可以使用
Control+Z

在编写应用程序时,在将字符串用作发送到MySQL服务器的SQL语句中的数据值之前,必须正确转义任何可能包含这些特殊字符的字符串,你可以通过两种方式做到这一点:

  • 使用转义特殊字符的函数处理字符串,在C程序中,可以使用
    mysql_real_escape_string_quote()
    C API函数转义字符,在构造其他SQL语句的SQL语句中,可以使用
    QUOTE()
    函数,Perl DBI接口提供了一个
    quote
    方法,用于将特殊字符转换为正确的转义序列,其他语言接口可能提供类似的功能。
  • 作为显式转义特殊字符的替代方法,许多MySQL API提供了占位符功能,使你能够将特殊标记插入到语句字符串中,然后在发出语句时将数据值绑定到它们,在本例中,API负责为你转义值中的特殊字符。

Boolean字面值

常量

TRUE
FALSE
的值分别为
1
0
,常量名可以用任何字母大小写书写。

mysql> SELECT TRUE, true, FALSE, false;
        -> 1, 1, 0, 0

NULL值

NULL
值表示“没有数据”,NULL可以用任何大小写。

注意,

NULL
值与数值类型的
0
或字符串类型的空字符串不同。

使用

LOAD DATA
SELECT ... INTO OUTFILE
执行为文本文件导入或导出操作中,
NULL
\N
序列表示。

对于使用

ORDER BY
排序,
NULL
值在升序排序的其他值之前排序,在降序排序的其他值之后排序。

到这里,我们也就讲完了《MySQL™ 参考手册(字面值)》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于mysql的知识点!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表