summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <bar@bar.intranet.mysql.r18.ru>2004-02-13 17:58:02 +0400
committerunknown <bar@bar.intranet.mysql.r18.ru>2004-02-13 17:58:02 +0400
commit82364214ecdbc574328efab8e8661468c2ec5b16 (patch)
tree1331ade42114d964d8a8b57c0af8bad50b507d76
parentf03296b6dcc2680eceb8f289e1ed6ed4ecee2b8e (diff)
downloadmariadb-git-82364214ecdbc574328efab8e8661468c2ec5b16.tar.gz
Bug #2699 UTF8 breaks primary keys for cols > 85 characters
-rw-r--r--mysql-test/r/ctype_utf8.result2
-rw-r--r--mysql-test/t/ctype_utf8.test7
-rw-r--r--sql/sql_table.cc7
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 &&