From b9c43eaedc637080d8ed6a9a04c95548f5a3d413 Mon Sep 17 00:00:00 2001 From: Rahman2001 Date: Wed, 22 Apr 2026 00:32:51 +0300 Subject: [PATCH] Fixed bug #120096 MysqlConnector/Java Connection Url CharacterEncoding bug --- .../java/com/mysql/cj/jdbc/result/ResultSetImpl.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/user-impl/java/com/mysql/cj/jdbc/result/ResultSetImpl.java b/src/main/user-impl/java/com/mysql/cj/jdbc/result/ResultSetImpl.java index 74e52b625..5bade45d7 100644 --- a/src/main/user-impl/java/com/mysql/cj/jdbc/result/ResultSetImpl.java +++ b/src/main/user-impl/java/com/mysql/cj/jdbc/result/ResultSetImpl.java @@ -1026,7 +1026,7 @@ public Reader getNCharacterStream(int columnIndex) throws SQLException { checkColumnBounds(columnIndex); String fieldEncoding = this.columnDefinition.getFields()[columnIndex - 1].getEncoding(); - if (fieldEncoding == null || !fieldEncoding.equals("UTF-8")) { + if (fieldEncoding == null || !isUTF8(fieldEncoding)) { throw new SQLException("Can not call getNCharacterStream() when field's charset isn't UTF-8"); } return getCharacterStream(columnIndex); @@ -1043,7 +1043,7 @@ public NClob getNClob(int columnIndex) throws SQLException { checkColumnBounds(columnIndex); String fieldEncoding = this.columnDefinition.getFields()[columnIndex - 1].getEncoding(); - if (fieldEncoding == null || !fieldEncoding.equals("UTF-8")) { + if (fieldEncoding == null || !isUTF8(fieldEncoding)) { throw new SQLException("Can not call getNClob() when field's charset isn't UTF-8"); } @@ -1086,7 +1086,7 @@ public String getNString(int columnIndex) throws SQLException { checkColumnBounds(columnIndex); String fieldEncoding = this.columnDefinition.getFields()[columnIndex - 1].getEncoding(); - if (fieldEncoding == null || !fieldEncoding.equals("UTF-8")) { + if (fieldEncoding == null || !isUTF8(fieldEncoding)) { throw new SQLException("Can not call getNString() when field's charset isn't UTF-8"); } return getString(columnIndex); @@ -1755,6 +1755,11 @@ public boolean isLast() throws SQLException { } } + private boolean isUTF8(String fieldEncoding) { + String UTF = fieldEncoding.toUpperCase(); + return UTF.equals("UTF-8"); + } + /** * Checks whether this ResultSet is scrollable even if its type is ResultSet.TYPE_FORWARD_ONLY. Required for backwards compatibility. *