On 04/03/2020 17:16, Alex Peshkoff via Firebird-devel wrote:
On 2020-03-04 20:01, Mark Rotteveel wrote:
What is the purpose of introducing yet another datatype called EXTENDED TIME/TIMESTAMP WITH TIME ZONE?


Help users missing ICU on the client work with time zones.

I am still trying to get my head around this new feature. As I understand it, it exists for support of broken or legacy systems without an ICU shared library. That is, following a "SET BIND..." the server's ICU is used instead of the client's.

My reading is that when the server's ICU is used, TIMESTAMP/TIME with TIME ZONE values are returned as UTC  with both the time zone id and the time zone offset as computed by the server's ICU taking into account any daylight savings time variations.

I presume that in extended mode, when a TIMESTAMP/TIME with TIME ZONE is used as a statement parameter, the value is passed to the server as a local time plus the time zone id and the server's ICU is used to convert this to UTC before evaluating the query.

From the user's point of view, the result is the same. There's just a small extra overhead with the wire protocol in terms of packet size, but the number of packets is the same.

The question then arises as to why this is not the normal way of working? Using the client's local ICU introduces a maintenance headache. If it is out-of-step with the server (or other clients) then inconsistent results may occur when computing daylight savings time offsets.

So why shouldn't I just always call "SET BIND..." as soon as a database connection is opened, support only the EXTENDED TIME/TIMESTAMP WITH TIME ZONE, and avoid the risk of ICU's getting out of step?


Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to