【问题标题】:What does x'0a' mean in SQL?SQL 中的 x'0a' 是什么意思?
【发布时间】:2021-09-07 11:12:27
【问题描述】:

我目前正在通过官方Flask tutorial 工作,并且有一些我以前从未遇到过的 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');

【问题讨论】:

    标签: python sql sqlite flask


    【解决方案1】:

    不是在 SQL 中,而是在 SQL 的某些特定方言中。根据那篇文章中的代码,它是 SQLite。所以来自the documentation

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

    这样它是一个包含换行符(LF,换行符)的 BLOB 文字。

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

    db小提琴here

    但是,它是特定于 SQLite 的(我不清楚 SQLite 的内部结构,但在其他 DBMS 中需要隐式类型转换),因此您可以在文本中放置任何 DBMS 都可以理解的换行符(和 hex为它返回相同的代码点,如下所示):

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

    db小提琴here

    【讨论】:

    • 我还要补充一点,在这种情况下,|| 不是 or 运算符,它是字符串连接
    • 请注意,在最新版本的 SQLite 中,您可以改写 char(10),这具有在 UTF-16 编码数据库中工作的优势(否则需要将换行符写为 @987654331 @)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2020-03-18
    • 2021-08-02
    • 2015-12-30
    • 2020-10-02
    • 2011-05-27
    • 2018-05-03
    相关资源
    最近更新 更多