summaryrefslogtreecommitdiff
path: root/sql/sql_table.cc
diff options
context:
space:
mode:
authorunknown <bar@bar.mysql.r18.ru>2003-09-15 14:45:42 +0500
committerunknown <bar@bar.mysql.r18.ru>2003-09-15 14:45:42 +0500
commitfaf5df672d53388b91643c935e8bec2a416ddd6d (patch)
tree37166ef441ef9d600b85794bbd996ea6844220d4 /sql/sql_table.cc
parente0c70de4c8173cc2f828d5c27e87003ca0f95cc7 (diff)
downloadmariadb-git-faf5df672d53388b91643c935e8bec2a416ddd6d.tar.gz
In CREATE syntax: KEY a (field_name(10))
10 now means "number of characters", not number of bytes.
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r--sql/sql_table.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 5f16377d20a..5e4971a7372 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -729,6 +729,9 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
*/
if (key->type == Key::FULLTEXT)
column->length=test(f_is_blob(sql_field->pack_flag));
+ else
+ column->length*= sql_field->charset->mbmaxlen;
+
if (f_is_blob(sql_field->pack_flag))
{
if (!(file->table_flags() & HA_BLOB_KEY))
@@ -2099,10 +2102,11 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
{ // Check if sub key
if (cfield->field->type() != FIELD_TYPE_BLOB &&
(cfield->field->pack_length() == key_part_length ||
- cfield->length != cfield->pack_length ||
- cfield->pack_length <= key_part_length))
+ cfield->length <= key_part_length /
+ key_part->field->charset()->mbmaxlen))
key_part_length=0; // Use whole field
}
+ key_part_length /= key_part->field->charset()->mbmaxlen;
key_parts.push_back(new key_part_spec(cfield->field_name,
key_part_length));
}