summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbar@bar.mysql.r18.ru <>2003-09-15 14:48:23 +0500
committerbar@bar.mysql.r18.ru <>2003-09-15 14:48:23 +0500
commit8d05911df07d15c8b41344a7509b6e0bc3b2bc82 (patch)
tree30b6fc8d2c1cd3c3d515a7bcbacd923405dbf3da
parent10c962bd412304d3672c84c7a53461a847b813f0 (diff)
parentf55b05e2cfbb81c9935be993915d2510fd6b5a2f (diff)
downloadmariadb-git-8d05911df07d15c8b41344a7509b6e0bc3b2bc82.tar.gz
Merge abarkov@build.mysql.com:/home/bk/mysql-4.1
into bar.mysql.r18.ru:/usr/home/bar/mysql-4.1
-rw-r--r--mysql-test/r/ctype_mb.result31
-rw-r--r--mysql-test/t/ctype_mb.test11
-rw-r--r--sql/sql_show.cc4
-rw-r--r--sql/sql_table.cc8
4 files changed, 51 insertions, 3 deletions
diff --git a/mysql-test/r/ctype_mb.result b/mysql-test/r/ctype_mb.result
index 4b3b464dea1..298e774186d 100644
--- a/mysql-test/r/ctype_mb.result
+++ b/mysql-test/r/ctype_mb.result
@@ -19,3 +19,34 @@ SELECT * FROM t1;
c1 c2 c3
aaaabbbbcccc aaaabbbbcccc aaaabbbbcccc
DROP TABLE t1;
+CREATE TABLE t1 (a CHAR(4) CHARACTER SET utf8, KEY key_a(a(3)));
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(4) character set utf8 default NULL,
+ KEY `key_a` (`a`(3))
+) TYPE=MyISAM CHARSET=latin1
+SHOW KEYS FROM t1;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
+t1 1 key_a 1 a A NULL 9 NULL YES BTREE
+ALTER TABLE t1 CHANGE a a CHAR(4);
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(4) default NULL,
+ KEY `key_a` (`a`(3))
+) TYPE=MyISAM CHARSET=latin1
+SHOW KEYS FROM t1;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
+t1 1 key_a 1 a A NULL 3 NULL YES BTREE
+ALTER TABLE t1 CHANGE a a CHAR(4) CHARACTER SET utf8;
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` char(4) character set utf8 default NULL,
+ KEY `key_a` (`a`(3))
+) TYPE=MyISAM CHARSET=latin1
+SHOW KEYS FROM t1;
+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
+t1 1 key_a 1 a A NULL 9 NULL YES BTREE
+DROP TABLE t1;
diff --git a/mysql-test/t/ctype_mb.test b/mysql-test/t/ctype_mb.test
index 5c3e67eec01..96bb634deb3 100644
--- a/mysql-test/t/ctype_mb.test
+++ b/mysql-test/t/ctype_mb.test
@@ -6,3 +6,14 @@ SHOW CREATE TABLE t1;
INSERT INTO t1 VALUES ('aaaabbbbccccdddd','aaaabbbbccccdddd','aaaabbbbccccdddd');
SELECT * FROM t1;
DROP TABLE t1;
+
+CREATE TABLE t1 (a CHAR(4) CHARACTER SET utf8, KEY key_a(a(3)));
+SHOW CREATE TABLE t1;
+SHOW KEYS FROM t1;
+ALTER TABLE t1 CHANGE a a CHAR(4);
+SHOW CREATE TABLE t1;
+SHOW KEYS FROM t1;
+ALTER TABLE t1 CHANGE a a CHAR(4) CHARACTER SET utf8;
+SHOW CREATE TABLE t1;
+SHOW KEYS FROM t1;
+DROP TABLE t1;
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 685d00db391..e37f692109c 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -1214,7 +1214,9 @@ store_create_info(THD *thd, TABLE *table, String *packet)
!(key_info->flags & HA_FULLTEXT)))
{
buff[0] = '(';
- char* end=int10_to_str((long) key_part->length, buff + 1,10);
+ char* end=int10_to_str((long) key_part->length /
+ key_part->field->charset()->mbmaxlen,
+ buff + 1,10);
*end++ = ')';
packet->append(buff,(uint) (end-buff));
}
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));
}