MySQL™ 参考手册(字面值)
来源:SegmentFault
时间:2023-02-24 12:44:34 411浏览 收藏
本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《MySQL™ 参考手册(字面值)》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~
字面值
本节描述如何在MySQL中编写字面值,这些参数包括字符串、数字、十六进制和位值、布尔值和
NULL,本节还将介绍在MySQL中处理这些基本类型时可能遇到的各种细微差别。
字符串字面值
字符串是一个字节或字符序列,包含在单引号(
')或双引号(
")字符中,例如:
'a string' "another string"
相互相邻的引用字符串连接为单个字符串,下列行是等价的:
'a string' 'a' ' ' 'string'
如果启用了
ANSI_QUOTESSQL模式,字符串字面值只能用单引号括起来,因为双引号括起来的字符串被解释为标识符。
二进制字符串是由字节组成的字符串,每个二进制字符串都有一个名为
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_ESCAPESSQL模式,否则某些序列具有特殊的含义,每个序列都以反斜杠(
\)开头,称为转义字符。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删除
相关阅读
更多>
-
499 收藏
-
244 收藏
-
235 收藏
-
157 收藏
-
101 收藏
最新阅读
更多>
-
223 收藏
-
334 收藏
-
224 收藏
-
275 收藏
-
372 收藏
-
463 收藏
课程推荐
更多>
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习