Version 5.1.48 is a maintenance release of the production 5.1 branch. It is suitable for use with MySQL Server versions 5.6, 5.7, and 8.0. It supports the Java Database Connectivity (JDBC) 4.2 API.
Important Change: For MySQL Server 8.0.14 and later, 5.7.25 and later, 5.6.43 and later, and 5.5.63 and later, minimal permissions on named pipes are granted to clients that use them to connect to the server. Connector/J, however, can only use named pipes when granted full access on them. As a workaround, the MySQL Server that Connector/J wants to connect to must be started with the system variable
named_pipe_full_access_group
; see the description for the system variable for more details. (Bug #28971500)The collation
utf8mb4_zh_0900_as_cs
has been added to theCharsetMapping
class. (Bug #29244101)The list of MySQL Server reserved words, stored as the
MYSQL_KEYWORDS
string in theDatabaseMetaData
class, has been updated. (Bug #28268619, Bug #91435)A number of private parameters of
ProfilerEvents
(for example,hostname
) had no getters for accessing them from outside of the class instance. Getter methods have now been added for all the parameters of the class. (Bug #20010454, Bug #74690)Added support for the
utf8mb4_0900_bin
collation, which is now supported by MySQL Server 8.0.17.
When a
CallableStatement
was used to call a stored procedure or function that did not exist on the server or that the client had no rights to access its parameters' metadata, Connector/J tried to infer the parameter metadata from the SQL call string itself, but did so wrongly. It was because Connector/J did not distinguish between a stored procedure and a stored function in its inference, and this fix makes Connector/J do so now. (Bug #29907618)ResultSetMetaData.getTableName()
returned null when no applicable results could be returned for a column. However, the JDBC documentation specified an empty string to be returned in that case. This fix makes the method behave as documented. The same correction has been made forgetCatalogName()
andgetSchemaName()
. (Bug #29452669, Bug #94585)Because the SHOW PROCESSLIST statement might cause the server to fail sometimes, Connector/J now avoids using the statement, but queries the performance scheme instead for the information it needs. (Bug #29329326)
Enabling
logSlowQueries
resulted in many unnecessary calls ofLogUtils.findCallingClassAndMethod()
. With this fix,LogUtils.findCallingClassAndMethod()
is called only whenprofileSQL
is true and even in that case, the number of calls are reduced to a minimal to avoid the excessive stack trace data the function used to generate. Thanks to Florian Agsteiner for contributing to the fix. (Bug #29277648, Bug #94101, Bug #17640628, Bug #70677)For an SSL connection, after a client disconnected from a server by calling
Connection.close()
, the TCP connection remained in the TIME_WAIT state on the server side. With this fix, the connection remains in the TIME_WAIT state on the client side instead, in most cases. (Bug #29054329, Bug #93590)A memory leak occurred if Connector/J was loaded via the bootstrap class path instead of the main application classpath. It was because
AbandonedConnectionCleanupThread
failed to initialize its internal thread in that case, so that references for closed connections were not cleaned up, and their number kept growing. This fix repairs the clean up process for closed connections and also makes the process thread safe. (Bug #28747636, Bug #92508)PreparedStatement.setTimestamp
threw aNullPointerException
ifgetParameterMetaData()
was called before the statement was executed. This fix adds the missing null checks togetParameterMetaData()
to avoid the exception. (Bug #28529781, Bug #92089)Setting the connection property
characterEncoding
to an encoding that maps to the MySQL character setlatin1
orutf8mb4
did not result in the corresponding default connection collation (latin1_swedish_ci
orutf8mb4_0900_ai_ci
, respectively) to be used on the server. With this fix, the server default is used in the situation. (Bug #28207422)Characters returned in a
ResultSet
were garbled when a server-sidePreparedStatement
was used, and the query involved concatenation of a number and a string with multi-byte characters. That was due to an issue with the number-to-string conversion involved, which has been corrected by this fix. (Bug #27453692)ResultSet.updateRow()
failed with aMySQLSyntaxErrorException
when the server was inNO_BACKSLASH_ESCAPES
SQL mode and some but not all text columns were updated. It was because Connector/J sent the strings as hex literals in that case and added to them unnecessary quotes for escapes. This fix add checks to avoid quotes for being added unnecessarily. (Bug #22850444, Bug #80441)PreparedStatement.executeUpdate()
failed with aMySQLSyntaxErrorException
when the server was inNO_BACKSLASH_ESCAPES
SQL mode and BLOB data types were involved in the statement. It was because Connector/J did not escape single quotes inBLOB
value properly inNO_BACKSLASH_ESCAPES
mode, and the problem has been corrected by this fix. (Bug #20913289)When a procedure and a function with the same name existed in a database, Connector/J retrieved parameter information from both at the same time by default, causing various errors at statement executions. This fix leverages the JDBC 4
DatabaseMetaData
methods to return parameter information only from the procedure or function of interest, so that statements are executed without errors. (Bug #19531305, Bug #73774)Calling
ProfilerEvent.pack()
resulted in anArrayIndexOutOfBoundsException
. It was due to a mishandling of data types, which has been corrected by this fix. (Bug #11750577, Bug #41172)