Loading innobase/include/rem0rec.h +9 −0 Original line number Diff line number Diff line Loading @@ -312,6 +312,15 @@ rec_offs_nth_extern( const ulint* offsets,/* in: array returned by rec_get_offsets() */ ulint n); /* in: nth field */ /********************************************************** Returns nonzero if the SQL NULL bit is set in nth field of rec. */ UNIV_INLINE ulint rec_offs_nth_sql_null( /*==================*/ /* out: nonzero if SQL NULL */ const ulint* offsets,/* in: array returned by rec_get_offsets() */ ulint n); /* in: nth field */ /********************************************************** Gets the physical size of a field. */ UNIV_INLINE ulint Loading innobase/include/rem0rec.ic +16 −0 Original line number Diff line number Diff line Loading @@ -954,6 +954,22 @@ rec_offs_nth_extern( & REC_OFFS_EXTERNAL)); } /********************************************************** Returns nonzero if the SQL NULL bit is set in nth field of rec. */ UNIV_INLINE ulint rec_offs_nth_sql_null( /*==================*/ /* out: nonzero if SQL NULL */ const ulint* offsets,/* in: array returned by rec_get_offsets() */ ulint n) /* in: nth field */ { ut_ad(rec_offs_validate(NULL, NULL, offsets)); ut_ad(n < rec_offs_n_fields(offsets)); return(UNIV_UNLIKELY(rec_offs_base(offsets)[1 + n] & REC_OFFS_SQL_NULL)); } /********************************************************** Gets the physical size of a field. */ UNIV_INLINE Loading innobase/row/row0upd.c +12 −0 Original line number Diff line number Diff line Loading @@ -395,6 +395,18 @@ row_upd_changes_field_size_or_external( old_len = rec_offs_nth_size(offsets, upd_field->field_no); if (rec_offs_comp(offsets) && rec_offs_nth_sql_null(offsets, upd_field->field_no)) { /* Note that in the compact table format, for a variable length field, an SQL NULL will use zero bytes in the offset array at the start of the physical record, but a zero-length value (empty string) will use one byte! Thus, we cannot use update-in-place if we update an SQL NULL varchar to an empty string! */ old_len = UNIV_SQL_NULL; } if (old_len != new_len) { return(TRUE); Loading mysql-test/r/innodb.result +109 −0 Original line number Diff line number Diff line Loading @@ -2663,3 +2663,112 @@ rollback; rollback; drop table t1; drop function f1; create table t1 ( a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; commit; mysql-test/t/innodb.test +116 −0 Original line number Diff line number Diff line Loading @@ -1635,3 +1635,119 @@ drop function f1; disconnect a; disconnect b; # # BUG 14056 Column prefix index on UTF-8 primary key column causes: Can't find record.. # create table t1 ( a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; commit; Loading
innobase/include/rem0rec.h +9 −0 Original line number Diff line number Diff line Loading @@ -312,6 +312,15 @@ rec_offs_nth_extern( const ulint* offsets,/* in: array returned by rec_get_offsets() */ ulint n); /* in: nth field */ /********************************************************** Returns nonzero if the SQL NULL bit is set in nth field of rec. */ UNIV_INLINE ulint rec_offs_nth_sql_null( /*==================*/ /* out: nonzero if SQL NULL */ const ulint* offsets,/* in: array returned by rec_get_offsets() */ ulint n); /* in: nth field */ /********************************************************** Gets the physical size of a field. */ UNIV_INLINE ulint Loading
innobase/include/rem0rec.ic +16 −0 Original line number Diff line number Diff line Loading @@ -954,6 +954,22 @@ rec_offs_nth_extern( & REC_OFFS_EXTERNAL)); } /********************************************************** Returns nonzero if the SQL NULL bit is set in nth field of rec. */ UNIV_INLINE ulint rec_offs_nth_sql_null( /*==================*/ /* out: nonzero if SQL NULL */ const ulint* offsets,/* in: array returned by rec_get_offsets() */ ulint n) /* in: nth field */ { ut_ad(rec_offs_validate(NULL, NULL, offsets)); ut_ad(n < rec_offs_n_fields(offsets)); return(UNIV_UNLIKELY(rec_offs_base(offsets)[1 + n] & REC_OFFS_SQL_NULL)); } /********************************************************** Gets the physical size of a field. */ UNIV_INLINE Loading
innobase/row/row0upd.c +12 −0 Original line number Diff line number Diff line Loading @@ -395,6 +395,18 @@ row_upd_changes_field_size_or_external( old_len = rec_offs_nth_size(offsets, upd_field->field_no); if (rec_offs_comp(offsets) && rec_offs_nth_sql_null(offsets, upd_field->field_no)) { /* Note that in the compact table format, for a variable length field, an SQL NULL will use zero bytes in the offset array at the start of the physical record, but a zero-length value (empty string) will use one byte! Thus, we cannot use update-in-place if we update an SQL NULL varchar to an empty string! */ old_len = UNIV_SQL_NULL; } if (old_len != new_len) { return(TRUE); Loading
mysql-test/r/innodb.result +109 −0 Original line number Diff line number Diff line Loading @@ -2663,3 +2663,112 @@ rollback; rollback; drop table t1; drop function f1; create table t1 ( a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; commit;
mysql-test/t/innodb.test +116 −0 Original line number Diff line number Diff line Loading @@ -1635,3 +1635,119 @@ drop function f1; disconnect a; disconnect b; # # BUG 14056 Column prefix index on UTF-8 primary key column causes: Can't find record.. # create table t1 ( a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b varchar(10), c varchar(10), filler varchar(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b text(10), c text(10), filler text(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xe880bde880bd,_utf8 0xe880bde880bd,'six'); insert into t1 values (4,_utf8 0xe880bdD0B1e880bd,_utf8 0xe880bdD0B1e880bd,'seven'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven'); insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; create table t1 ( a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2)) ) character set utf8 engine = innodb; create table t2 ( a int, b blob(10), c blob(10), filler blob(10), primary key(a, b(2)), unique key (a, c(2)) ) character set ucs2 engine = innodb; insert into t1 values (1,'abcdefg','abcdefg','one'); insert into t1 values (2,'ijkilmn','ijkilmn','two'); insert into t1 values (3,'qrstuvw','qrstuvw','three'); insert into t1 values (4,_utf8 0xe880bd,_utf8 0xe880bd,'four'); insert into t1 values (4,_utf8 0x5b,_utf8 0x5b,'five'); insert into t1 values (4,_utf8 0xD0B1,_utf8 0xD0B1,'eight'); insert into t2 values (1,'abcdefg','abcdefg','one'); insert into t2 values (2,'ijkilmn','ijkilmn','two'); insert into t2 values (3,'qrstuvw','qrstuvw','three'); insert into t2 values (4,_ucs2 0x00e400,_ucs2 0x00e400,'four'); insert into t2 values (4,_ucs2 0x00640065,_ucs2 0x00640065,'five'); insert into t2 values (4,_ucs2 0x00e400e50068,_ucs2 0x00e400e50068,'six'); insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven'); insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight'); insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten'); insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken'); drop table t1; drop table t2; commit;