--- a/com/mysql/jdbc/ResultSetImpl.java +++ b/com/mysql/jdbc/ResultSetImpl.java @@ -929,10 +929,17 @@ this.wasNullFlag = false; - String encoding = this.fields[columnIndexMinusOne].getCollationIndex() == CharsetMapping.MYSQL_COLLATION_INDEX_binary ? this.connection.getEncoding() - : this.fields[columnIndexMinusOne].getEncoding(); + String encoding = getStringEncoding(this.fields[columnIndexMinusOne]); return this.thisRow.getString(columnIndex - 1, encoding, this.connection); + } + + private String getStringEncoding(Field field) throws SQLException { + if (field.getMysqlType() == MysqlDefs.FIELD_TYPE_JSON) { + return field.getEncoding(); + } + + return field.getCollationIndex() == CharsetMapping.MYSQL_COLLATION_INDEX_binary ? this.connection.getEncoding() : field.getEncoding(); } protected Date fastDateCreate(Calendar cal, int year, int month, int day) throws SQLException { @@ -5239,8 +5246,7 @@ return String.valueOf(getNumericRepresentationOfSQLBitType(columnIndex)); } - String encoding = metadata.getCollationIndex() == CharsetMapping.MYSQL_COLLATION_INDEX_binary ? this.connection.getEncoding() - : metadata.getEncoding(); + String encoding = getStringEncoding(metadata); stringVal = this.thisRow.getString(internalColumnIndex, encoding, this.connection);