我试图理解postgresql 15和本地设置的所有细节。我试图设置所有控制区域设置的各种设置,但我仍然得到一些意想不到的结果。
postgres=# CREATE DATABASE lctest TEMPLATE='template0' LC_COLLATE='nb_NO.UTF-8' LOCALE='nb_NO.UTF-8';
CREATE DATABASE
postgres=# \c lctest
You are now connected to database "lctest" as user "postgres".
lctest=# show LC_TIME;
lc_time
-------------
nb_NO.UTF-8
(1 row)
lctest=# select DATE('07/08/2009');
date
------------
2009-07-08
(1 row)
lctest=# select to_char(DATE('07/08/2009'), 'DD/TMMonth/YYYY');
to_char
--------------
08/Juli/2009
(1 row)
这就是我认为结果出乎意料的地方。我从一个字符串中转换一个日期,postgres将日期解释为MM/DD/YYYY
。这不符合我的语言环境设置的预期结果。我还将所有其他可用的LC_*
值设置为nb_NO.UTF-8
,正如预期的那样,我得到了相同的结果,因为我认为其他值不会影响这一点。
是否有更多的设置会影响postgres 15中日期字符串的解析方式?
当然,我可以将日期格式指定为DD/MM/YYYY
,但这破坏了区域设置的灵活性。如果我必须指定所有格式细节,那么locale有什么意义呢?
1条答案
按热度按时间5gfr0r5j1#
lc_time
不会影响字符串如何被解释为日期。它在to_char()
(将时间戳格式化为字符串)中使用,具有特殊的格式指令,如TMMonth
。要影响字符串如何被解释为日期,您必须配置
datestyle
。举例来说: