【问题标题】:PostgreSQL: what is the difference between 0 and (0)::smallint as default?PostgreSQL:默认的 0 和 (0)::smallint 有什么区别?
【发布时间】:2020-10-28 23:01:54
【问题描述】:

我正在研究列类型和默认值,遇到了两列,都是smallint,但默认值不同:

  1. 0
  2. (0)::smallint

当我将 2 更改为 1 的值时,两者都是相同的,似乎没有任何变化。当然,我用谷歌搜索找到了我的问题的答案,发现:: 用于类型转换。但我想知道,如果它是默认值,为什么需要类型转换?

【问题讨论】:

  • 您不需要进行类型转换。在创建表时,有人在一个实例中进行了转换,但在另一个实例中没有。试试这个看看:create table somesmallints (a smallint default 0, b smallint default 0::smallint, c smallint default (0)::smallint); 然后做一个\d+ somesmallints

标签: postgresql sqldatatypes


【解决方案1】:

没有区别,也不需要强制转换。

# create table somesmallints (a smallint default 0, b smallint default 0::smallint, c smallint default (0)::smallint);

CREATE TABLE
# \d+ somesmallints;
                                  Table "public.somesmallints"
 Column |   Type   | Collation | Nullable |    Default    | Storage | Stats target | Description 
--------+----------+-----------+----------+---------------+---------+--------------+-------------
 a      | smallint |           |          | 0             | plain   |              | 
 b      | smallint |           |          | (0)::smallint | plain   |              | 
 c      | smallint |           |          | (0)::smallint | plain   |              | 

# select 0 = 0::smallint;
 ?column? 
----------
 t
(1 row)

【讨论】:

  • 那么,基本上,只要把'0'作为默认值就可以了?
  • @kasimir 是的。只需使用0
猜你喜欢
  • 2016-03-23
  • 2021-06-16
  • 1970-01-01
  • 2012-09-23
  • 2021-02-13
  • 2012-08-02
  • 1970-01-01
  • 2016-02-19
相关资源
最近更新 更多