【问题标题】:Trouble inserting value into a TEXT column with Postgres使用 Postgres 将值插入 TEXT 列时出现问题
【发布时间】:2020-02-04 02:59:25
【问题描述】:

当我尝试将字母数字值插入 Postgres DB 中的 TEXT 列时出现错误。这是表定义

]1

这是我用来向表中插入数据的查询

INSERT INTO sensor_data
            (
                time,
                i1, i2, i3, i4,
                i5, i6, i7, i8,
                mrt,air_temperature,
                humidity,tvoc, device_id)
        VALUES (to_timestamp(1667595922) AT TIME ZONE 'UTC',
                41.340000,  26.160000, 25.860000, 26.160000,
                25.900000, 25.960000, 26.720000, 25.580000,
                26.085000, 28.065536,
                 55.204773,  40.000000, 1a0032000947363339343638
            );

这是我收到的错误消息

错误:“a0032000947363339343638”处或附近的语法错误 第 12 行:55.204773、40.000000、1a00320009473633...

当我输入这个查询时,它工作得很好。

INSERT INTO sensor_data
            (
                time,
                i1, i2, i3, i4,
                i5, i6, i7, i8,
                mrt,air_temperature,
                humidity,tvoc, device_id)
        VALUES (to_timestamp(1667595922) AT TIME ZONE 'UTC',
                41.340000,  26.160000, 25.860000, 26.160000,
                25.900000, 25.960000, 26.720000, 25.580000,
                26.085000, 28.065536,
                 55.204773,  40.000000, 10032000947363339343638
            );

两个查询之间的唯一区别是 device_id 值。当值为“1a0032000947363339343638”时插入失败,当值为“10032000947363339343638”时插入失败。

即使数据类型是 TEXT,当我尝试插入“1a0032000947363339343638”时,为什么插入会失败?以及如何让表格接受 1a0032000947363339343638' 作为设备 ID?

【问题讨论】:

标签: sql postgresql sql-insert string-constant


【解决方案1】:

虽然数字不需要加引号,但字符串必须加引号以区别于其他语法并允许空格。

在 Postgres 中,这必须是单引号。其他数据库可能允许不同的引用。

INSERT INTO sensor_data
            (
                time,
                i1, i2, i3, i4,
                i5, i6, i7, i8,
                mrt,air_temperature,
                humidity,tvoc, device_id)
        VALUES (to_timestamp(1667595922) AT TIME ZONE 'UTC',
                41.340000,  26.160000, 25.860000, 26.160000,
                25.900000, 25.960000, 26.720000, 25.580000,
                26.085000, 28.065536,
                 55.204773,  40.000000, '1a0032000947363339343638'
            );

您可以在Postgres documentation on constants阅读更多内容。

【讨论】:

  • 字符串常量的单引号是在 SQL 标准中定义的,这对 Postgres 来说没什么特别的
  • @a_horse_with_no_name 我特别想的是那些可能正在学习 MySQL 的人,这两者都允许。
猜你喜欢
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-10
  • 2011-07-19
相关资源
最近更新 更多