Bug #95984 | Prepared commands execute with error on MySQL Server 8.0.16 | ||
---|---|---|---|
Submitted: | 25 Jun 2019 16:59 | Modified: | 21 Feb 2020 16:39 |
Reporter: | Guest User | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | Connector / NET | Severity: | S1 (Critical) |
Version: | 8.0.16 | OS: | Windows (10) |
Assigned to: | CPU Architecture: | Any |
[25 Jun 2019 16:59]
Guest User
[25 Jun 2019 17:01]
Guest User
Files needed to reproduce the bug
Attachment: Program Package.zip (application/x-zip-compressed, text), 5.12 KiB.
[25 Jun 2019 17:32]
Guest User
The issue appears to be with MySqlDbType.JSON. When setting a parameter to that type, that causes the exception. If you comment that out in the sample, it works fine. JSON worked fine in 8.0.14 - what changed?
[25 Jun 2019 22:06]
Bradley Grainger
"Incorrect arguments to mysqld_stmt_execute" is a server-side error. It's being generated from this code, which disallows MYSQL_TYPE_JSON as a valid parameter type for prepared statements: https://github.com/mysql/mysql-server/blob/124c7ab1d6f914637521fd4463a993aa73403513/sql/sq... The workaround is to avoid the JSON column type when adding parameters, e.g., cmd.Parameters.AddWithValue("@Five", "[]").MySqlDbType = MySqlDbType.VarChar; This is also a bug in MySqlConnector (because the client's column type isn't permitted): https://github.com/mysql-net/MySqlConnector/issues/659 I plan to fix it in the next version. > JSON worked fine in 8.0.14 - what changed? I get the same error with MySQL Server 8.0.14 and Connector/NET 8.0.14. It looks like the server-side change (https://github.com/mysql/mysql-server/commit/69e990f35449bbc493ae9df2b2ed83ac62ed1720) predates 8.0.14, so I would expect this to fail in that version.
[26 Jun 2019 2:05]
Guest User
Thanks for the investigation, Bradley! So I guess the fix is to remove MySqlDbType.JSON from Connector, then. Seems bad to have it exist when it will lead to code that errors...
[26 Jun 2019 8:53]
MySQL Verification Team
Hello John Belge, Thank you for the report and test case. regards, Umesh
[26 Jun 2019 20:35]
Bradley Grainger
> So I guess the fix is to remove MySqlDbType.JSON from Connector, then. A possible fix would be to handle that value specially when preparing the command. For example, MySqlDbType.UInt24 is actually transmitted as Int32: https://github.com/mysql/mysql-connector-net/blob/f2a0f56edf4a12b739d19fbcc2b1099929eb464c... MySqlDbType.JSON could similarly be automatically translated to MySqlDbType.VarChar with no impact on users' code.
[28 Sep 2019 17:55]
Guest User
Can we get a fix in before the next release please?
[14 Oct 2019 22:22]
Guest User
Aaaand the next release is out without a fix, now we wait months for the next one.ðŸ˜
[21 Jan 2020 2:53]
Guest User
Aaaand the next release is out without a fix, now we wait months for the next one.😠Disappointed there is still no word on a fix.
[20 Feb 2020 19:49]
Gustavo Cuatepotzo
Posted by developer: The fix to this bug will be released in 8.0.20, MySqlDbType.JSON type still can be used as parameter, but internally will be handled as a varchar.
[21 Feb 2020 16:39]
Christine Cole
Posted by developer: Fixed as of the upcoming MySQL Connector/NET 8.0.20 release, and here's the proposed changelog entry from the documentation team: The MySqlDbType.JSON type when used as a parameter in prepared statements produced code errors. Now, Connector/NET interprets MySqlDbType.JSON as MySqlDbType.VarChar without any change required by existing applications that specify a JSON column. Thank you for the bug report.