diff --git a/sql/field.cc b/sql/field.cc index 7eb277e23d8..ec02ff0808e 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -8546,7 +8546,9 @@ void Field_blob::sort_string(uchar *to,uint length) Store length of blob last in blob to shorter blobs before longer blobs */ length-= packlength; - store_bigendian(buf.length(), to + length, packlength); + + uint key_length = MY_MIN(buf.length(), length); + store_bigendian(key_length, to + length, packlength); } #ifdef DBUG_ASSERT_EXISTS diff --git a/storage/rocksdb/mysql-test/rocksdb_rpl/r/rpl_blob_key.result b/storage/rocksdb/mysql-test/rocksdb_rpl/r/rpl_blob_key.result new file mode 100644 index 00000000000..6a18bcdeecc --- /dev/null +++ b/storage/rocksdb/mysql-test/rocksdb_rpl/r/rpl_blob_key.result @@ -0,0 +1,9 @@ +include/master-slave.inc +[connection master] +CREATE TABLE t1 (b BLOB, i INT, KEY(b(8))) ENGINE=RocksDB; +INSERT INTO t1 VALUES (REPEAT('a',9),1); +UPDATE t1 SET i = 2; +connection slave; +connection master; +DROP TABLE t1; +include/rpl_end.inc diff --git a/storage/rocksdb/mysql-test/rocksdb_rpl/t/rpl_blob_key.test b/storage/rocksdb/mysql-test/rocksdb_rpl/t/rpl_blob_key.test new file mode 100644 index 00000000000..8c64ac979cb --- /dev/null +++ b/storage/rocksdb/mysql-test/rocksdb_rpl/t/rpl_blob_key.test @@ -0,0 +1,15 @@ +--source include/have_rocksdb.inc +--source include/have_binlog_format_row.inc +--source include/master-slave.inc + +CREATE TABLE t1 (b BLOB, i INT, KEY(b(8))) ENGINE=RocksDB; +INSERT INTO t1 VALUES (REPEAT('a',9),1); + +UPDATE t1 SET i = 2; + +--sync_slave_with_master + +# Cleanup +--connection master +DROP TABLE t1; +--source include/rpl_end.inc