diff options
author | unknown <bar@bar.intranet.mysql.r18.ru> | 2004-02-13 17:58:02 +0400 |
---|---|---|
committer | unknown <bar@bar.intranet.mysql.r18.ru> | 2004-02-13 17:58:02 +0400 |
commit | 82364214ecdbc574328efab8e8661468c2ec5b16 (patch) | |
tree | 1331ade42114d964d8a8b57c0af8bad50b507d76 | |
parent | f03296b6dcc2680eceb8f289e1ed6ed4ecee2b8e (diff) | |
download | mariadb-git-82364214ecdbc574328efab8e8661468c2ec5b16.tar.gz |
Bug #2699 UTF8 breaks primary keys for cols > 85 characters
-rw-r--r-- | mysql-test/r/ctype_utf8.result | 2 | ||||
-rw-r--r-- | mysql-test/t/ctype_utf8.test | 7 | ||||
-rw-r--r-- | sql/sql_table.cc | 7 |
3 files changed, 15 insertions, 1 deletions
diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result index 658a7b8f5f6..8b7178993a7 100644 --- a/mysql-test/r/ctype_utf8.result +++ b/mysql-test/r/ctype_utf8.result @@ -167,3 +167,5 @@ select hex(s1) from t1; hex(s1) 41 drop table t1; +create table t1 (a char(160) character set utf8, primary key(a)); +ERROR HY000: Incorrect sub part key. The used key part isn't a string, the used length is longer than the key part or the storage engine doesn't support unique sub keys diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test index 0615de99b7a..49b1ed94757 100644 --- a/mysql-test/t/ctype_utf8.test +++ b/mysql-test/t/ctype_utf8.test @@ -98,3 +98,10 @@ create table t1 (s1 text character set utf8); insert into t1 values (0x41FF); select hex(s1) from t1; drop table t1; + +# +# Bug 2699 +# UTF8 breaks primary keys for cols > 85 characters +# +--error 1089 +create table t1 (a char(160) character set utf8, primary key(a)); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 4e66154e2a2..404d2b56e06 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -877,7 +877,12 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, column->field_name); DBUG_RETURN(-1); } - key_part_info->length=(uint8) length; + if (length > file->max_key_part_length()) + { + my_error(ER_WRONG_SUB_KEY,MYF(0)); + DBUG_RETURN(-1); + } + key_part_info->length=(uint16) length; /* Use packed keys for long strings on the first column */ if (!(db_options & HA_OPTION_NO_PACK_KEYS) && (length >= KEY_DEFAULT_PACK_LENGTH && |