@@ -2444,6 +2444,9 @@ public void testOffsetTimeSetters() throws Exception {
2444
2444
public void testOffsetDatetimeSetters () throws Exception {
2445
2445
boolean withFract = versionMeetsMinimum (5 , 6 , 4 ); // fractional seconds are not supported in previous versions
2446
2446
boolean allowsOffset = versionMeetsMinimum (8 , 0 , 19 );
2447
+ // Starting from MySQL 8.0.22 server also converts TIMESTAMP_WITH_TIMEZONE value to the server time zone for column types other than TIMESTAMP and DATETIME.
2448
+ // In MySQL 8.0.26 it was reverted.
2449
+ boolean serverConvertsTzForAllTypes = versionMeetsMinimum (8 , 0 , 22 ) && !versionMeetsMinimum (8 , 0 , 26 );
2447
2450
2448
2451
createTable (tYear , "(id INT, d YEAR)" );
2449
2452
createTable (tDate , "(id INT, d DATE)" );
@@ -2463,6 +2466,8 @@ public void testOffsetDatetimeSetters() throws Exception {
2463
2466
TimeZone serverTz ;
2464
2467
try (Connection testConn = getConnectionWithProps (props )) {
2465
2468
serverTz = ((MysqlConnection ) testConn ).getSession ().getServerSession ().getSessionTimeZone ();
2469
+ System .out .println ("Local tz: " + TimeZone .getDefault ());
2470
+ System .out .println ("Server tz: " + serverTz );
2466
2471
}
2467
2472
2468
2473
OffsetDateTime odt_20200101_120000_123456_05_00 = OffsetDateTime .of (2020 , 1 , 1 , 12 , 00 , 00 , withFract ? 123456000 : 0 , ZoneOffset .ofHours (5 ));
@@ -2531,15 +2536,15 @@ public void testOffsetDatetimeSetters() throws Exception {
2531
2536
.format (useSSPS ? TimeUtil .DATE_FORMATTER : DateTimeFormatter .ofPattern ("20HH-mm-ss" ));
2532
2537
// Starting from MySQL 8.0.22 TIMESTAMP_WITH_TIMEZONE value is also converted to the server time zone by server
2533
2538
// for column types other than TIMESTAMP or DATETIME
2534
- String expDateChar = versionMeetsMinimum ( 8 , 0 , 22 )
2539
+ String expDateChar = serverConvertsTzForAllTypes
2535
2540
? odt_20200101_120000_123456_05_00 .atZoneSameInstant (sessionTz .toZoneId ()).format (TimeUtil .DATE_FORMATTER )
2536
2541
: odt_20200101_120000_123456_05_00 .format (TimeUtil .DATE_FORMATTER );
2537
2542
String expDateTS = zdt_TS_on_wire .format (TimeUtil .DATE_FORMATTER );
2538
2543
2539
2544
String expTimeNoMs = zdt_20200101_120000_123456_on_wire .format (TimeUtil .TIME_FORMATTER_NO_FRACT_NO_OFFSET );
2540
2545
String expTime = zdt_20200101_120000_123456_on_wire .format (timeFmt );
2541
2546
2542
- String expTime2 = versionMeetsMinimum ( 8 , 0 , 22 )
2547
+ String expTime2 = serverConvertsTzForAllTypes
2543
2548
? odt_20200101_120000_123456_05_00 .atZoneSameInstant (sessionTz .toZoneId ()).format (timeFmt )
2544
2549
: odt_20200101_120000_123456_05_00 .format (timeFmt );
2545
2550
String expTimeTS = zdt_TS_on_wire .format (timeFmt );
@@ -2815,6 +2820,9 @@ public void testOffsetDatetimeSetters() throws Exception {
2815
2820
public void testZonedDatetimeSetters () throws Exception {
2816
2821
boolean withFract = versionMeetsMinimum (5 , 6 , 4 ); // fractional seconds are not supported in previous versions
2817
2822
boolean allowsOffset = versionMeetsMinimum (8 , 0 , 19 );
2823
+ // Starting from MySQL 8.0.22 server also converts TIMESTAMP_WITH_TIMEZONE value to the server time zone for column types other than TIMESTAMP and DATETIME.
2824
+ // In MySQL 8.0.26 it was reverted.
2825
+ boolean serverConvertsTzForAllTypes = versionMeetsMinimum (8 , 0 , 22 ) && !versionMeetsMinimum (8 , 0 , 26 );
2818
2826
2819
2827
createTable (tYear , "(id INT, d YEAR)" );
2820
2828
createTable (tDate , "(id INT, d DATE)" );
@@ -2832,6 +2840,8 @@ public void testZonedDatetimeSetters() throws Exception {
2832
2840
TimeZone serverTz ;
2833
2841
try (Connection testConn = getConnectionWithProps (props )) {
2834
2842
serverTz = ((MysqlConnection ) testConn ).getSession ().getServerSession ().getSessionTimeZone ();
2843
+ System .out .println ("Local tz: " + TimeZone .getDefault ());
2844
+ System .out .println ("Server tz: " + serverTz );
2835
2845
}
2836
2846
2837
2847
ZonedDateTime zdt_20200101_120000_123456_05_00 = ZonedDateTime .of (withFract ? ldt_20200101_120000_123456 : ldt_20200101_120000_123456 .withNano (0 ),
@@ -2900,14 +2910,14 @@ public void testZonedDatetimeSetters() throws Exception {
2900
2910
.format (useSSPS ? TimeUtil .DATE_FORMATTER : DateTimeFormatter .ofPattern ("20HH-mm-ss" ));
2901
2911
// Starting from MySQL 8.0.22 TIMESTAMP_WITH_TIMEZONE value is also converted to the server time zone by server
2902
2912
// for column types other than TIMESTAMP or DATETIME
2903
- String expDateChar = versionMeetsMinimum ( 8 , 0 , 22 )
2913
+ String expDateChar = serverConvertsTzForAllTypes
2904
2914
? zdt_20200101_120000_123456_05_00 .withZoneSameInstant (sessionTz .toZoneId ()).format (TimeUtil .DATE_FORMATTER )
2905
2915
: zdt_20200101_120000_123456_05_00 .format (TimeUtil .DATE_FORMATTER );
2906
2916
String expDateTS = zdt_TS_on_wire .format (TimeUtil .DATE_FORMATTER );
2907
2917
2908
2918
String expTimeNoMs = zdt_20200101_120000_123456_on_wire .format (TimeUtil .TIME_FORMATTER_NO_FRACT_NO_OFFSET );
2909
2919
String expTime = zdt_20200101_120000_123456_on_wire .format (timeFmt );
2910
- String expTime2 = versionMeetsMinimum ( 8 , 0 , 22 )
2920
+ String expTime2 = serverConvertsTzForAllTypes
2911
2921
? zdt_20200101_120000_123456_05_00 .withZoneSameInstant (sessionTz .toZoneId ()).format (timeFmt )
2912
2922
: zdt_20200101_120000_123456_05_00 .format (timeFmt );
2913
2923
String expTimeTS = zdt_TS_on_wire .format (timeFmt );
@@ -3389,9 +3399,10 @@ void setObjectFromTz(Properties props, String tableName, Object parameter, SQLTy
3389
3399
testConn = this .utcConnections .get (getKey (props ));
3390
3400
Statement localStmt = testConn .createStatement ();
3391
3401
localStmt .execute ("set @@time_zone='+00:00'" );
3392
- ResultSet localRs = localStmt .executeQuery ("SELECT * FROM " + tableName + " WHERE id = " + id + " AND d = '" + expectedUTCValue + "'"
3393
- + (expectedUnixTimestamp != null ? " AND unix_timestamp(d) = " + expectedUnixTimestamp : "" ));
3394
- assertTrue (localRs .next ());
3402
+ String sql = "SELECT * FROM " + tableName + " WHERE id = " + id + " AND d = '" + expectedUTCValue + "'"
3403
+ + (expectedUnixTimestamp != null ? " AND unix_timestamp(d) = " + expectedUnixTimestamp : "" );
3404
+ ResultSet localRs = localStmt .executeQuery (sql );
3405
+ assertTrue (localRs .next (), parameter + "\n " + targetSqlType + "\n " + senderTz + "\n " + useMethod + "\n " + sql );
3395
3406
localStmt .close ();
3396
3407
}
3397
3408
} finally {
0 commit comments