在SQL中,x'0a'是什么意思?

3

我目前正在完成官方的Flask教程,但有些SQL是我从未遇到过的,而且没有得到解释。我知道我们要将值插入post表中,并且对于body,我们要么插入'test',要么插入x'0a',或者插入'body'。那么x'0a'是什么意思呢?x是某种格式说明符吗?我在谷歌上搜索了一下,但没有找到任何有用的东西。

INSERT INTO post (title, body, author_id, created)
VALUES
  ('test title', 'test' || x'0a' || 'body', 1, '2018-01-01 00:00:00');
1个回答

5

它不是SQL,而是某种特定的SQL方言。根据文章中的代码,它是SQLite。因此根据文档

BLOB字面值是包含十六进制数据并以单个"x"或"X"字符开头的字符串字面值。例如:X'53514C697465'

这样就是一个包含换行符(LF,新行)字符的BLOB字面值。

select 'q' || x'0a' || 'w' as tst
测试
q
w

在此处查看db<>fiddle 示例

然而,这只适用于SQLite数据库(我并不完全了解SQLite内部机制,但在其他DBMS中将需要进行隐式类型转换),所以您可以在文本中插入换行符,这样任何DBMS都可以理解它(并且hex会返回与下面显示的相同码点):

select 'q
w' as tst, hex('
') as what_is_newline
tst what_is_newline
q
w
0A

db<>fiddle 这里


3
我还要补充一点,在这个上下文中,|| 不是 运算符,而是字符串连接。 - DeepSpace
1
请注意,在最新版本的SQLite中,您可以使用 char(10) 代替,这样有一个优点,即在UTF-16编码的数据库中也可以工作(否则需要将换行符写为 x'000a')。 - dan04

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接