When gh-ost replays a binlog DML event, the go-mysql library returns varbinary column values as a Go string (not []byte). In convertArg, the existing code only converted string → []byte when the column had a non-empty Charset (e.g. utf8mb4 for varchar). varbinary columns have no character set, so Charset is always "", and the string fell through unconverted.
The Go MySQL driver sends string args as MYSQL_TYPE_VAR_STRING with the connection's utf8mb4 charset metadata attached, causing MySQL to validate the bytes. If a varbinary value (e.g. a binary UUID) contains byte sequences that are invalid utf8mb4, MySQL emits Warning 1300. With gh-ost's panic-on-warnings enabled, this aborts the migration.
varbinary columns are commonly used for UUIDs which have arbitrary bytes and can easily trigger this problem.
When gh-ost replays a binlog DML event, the go-mysql library returns varbinary column values as a Go
string(not[]byte). In convertArg, the existing code only converted string → []byte when the column had a non-empty Charset (e.g. utf8mb4 for varchar). varbinary columns have no character set, so Charset is always "", and the string fell through unconverted.The Go MySQL driver sends
stringargs as MYSQL_TYPE_VAR_STRING with the connection's utf8mb4 charset metadata attached, causing MySQL to validate the bytes. If a varbinary value (e.g. a binary UUID) contains byte sequences that are invalid utf8mb4, MySQL emits Warning 1300. With gh-ost's panic-on-warnings enabled, this aborts the migration.varbinarycolumns are commonly used for UUIDs which have arbitrary bytes and can easily trigger this problem.