Loading mysql-test/r/ctype_sjis.result +13 −0 Original line number Diff line number Diff line Loading @@ -47,3 +47,16 @@ select hex(a) from t1; hex(a) 878A drop table t1; create table t1(c enum(0x9353,0x9373) character set sjis); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `c` enum('S','s') character set sjis default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 insert into t1 values (0x9353); insert into t1 values (0x9373); select hex(c) from t1; hex(c) 9353 9373 drop table t1; mysql-test/r/type_enum.result +0 −2 Original line number Diff line number Diff line Loading @@ -1678,8 +1678,6 @@ a int(11) YES 1 b enum('value','_value','') value drop table t1; CREATE TABLE t1 (c enum('a', 'A') BINARY); Warnings: Note 1291 Column 'c' has duplicated value 'a' in ENUM INSERT INTO t1 VALUES ('a'),('A'); SELECT * FROM t1; c Loading mysql-test/t/ctype_sjis.test +10 −0 Original line number Diff line number Diff line Loading @@ -41,3 +41,13 @@ create table t1 (a char(10) character set sjis); insert into t1 values (0x878A); select hex(a) from t1; drop table t1; # # Bug #6206 ENUMs are not case sensitive even if declared BINARY # create table t1(c enum(0x9353,0x9373) character set sjis); show create table t1; insert into t1 values (0x9353); insert into t1 values (0x9373); select hex(c) from t1; drop table t1; sql/sql_table.cc +14 −14 Original line number Diff line number Diff line Loading @@ -370,19 +370,19 @@ static int sort_keys(KEY *a, KEY *b) */ void check_duplicates_in_interval(const char *set_or_name, const char *name, TYPELIB *typelib) const char *name, TYPELIB *typelib, CHARSET_INFO *cs) { unsigned int old_count= typelib->count; const char **old_type_names= typelib->type_names; old_count= typelib->count; old_type_names= typelib->type_names; TYPELIB tmp= *typelib; const char **cur_value= typelib->type_names; for ( ; typelib->count > 1; cur_value++) unsigned int *cur_length= typelib->type_lengths; for ( ; tmp.count > 1; cur_value++, cur_length++) { typelib->type_names++; typelib->count--; if (find_type((char*)*cur_value,typelib,1)) tmp.type_names++; tmp.type_lengths++; tmp.count--; if (find_type2(&tmp, (const char*)*cur_value, *cur_length, cs)) { push_warning_printf(current_thd,MYSQL_ERROR::WARN_LEVEL_NOTE, ER_DUPLICATED_VALUE_IN_TYPE, Loading @@ -390,8 +390,6 @@ void check_duplicates_in_interval(const char *set_or_name, name,*cur_value,set_or_name); } } typelib->count= old_count; typelib->type_names= old_type_names; } /* Loading Loading @@ -571,7 +569,8 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, sql_field->pack_flag|=FIELDFLAG_BINARY; sql_field->unireg_check=Field::INTERVAL_FIELD; check_duplicates_in_interval("ENUM",sql_field->field_name, sql_field->interval); sql_field->interval, sql_field->charset); break; case FIELD_TYPE_SET: sql_field->pack_flag=pack_length_to_packflag(sql_field->pack_length) | Loading @@ -580,7 +579,8 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, sql_field->pack_flag|=FIELDFLAG_BINARY; sql_field->unireg_check=Field::BIT_FIELD; check_duplicates_in_interval("SET",sql_field->field_name, sql_field->interval); sql_field->interval, sql_field->charset); break; case FIELD_TYPE_DATE: // Rest of string types case FIELD_TYPE_NEWDATE: Loading Loading
mysql-test/r/ctype_sjis.result +13 −0 Original line number Diff line number Diff line Loading @@ -47,3 +47,16 @@ select hex(a) from t1; hex(a) 878A drop table t1; create table t1(c enum(0x9353,0x9373) character set sjis); show create table t1; Table Create Table t1 CREATE TABLE `t1` ( `c` enum('S','s') character set sjis default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 insert into t1 values (0x9353); insert into t1 values (0x9373); select hex(c) from t1; hex(c) 9353 9373 drop table t1;
mysql-test/r/type_enum.result +0 −2 Original line number Diff line number Diff line Loading @@ -1678,8 +1678,6 @@ a int(11) YES 1 b enum('value','_value','') value drop table t1; CREATE TABLE t1 (c enum('a', 'A') BINARY); Warnings: Note 1291 Column 'c' has duplicated value 'a' in ENUM INSERT INTO t1 VALUES ('a'),('A'); SELECT * FROM t1; c Loading
mysql-test/t/ctype_sjis.test +10 −0 Original line number Diff line number Diff line Loading @@ -41,3 +41,13 @@ create table t1 (a char(10) character set sjis); insert into t1 values (0x878A); select hex(a) from t1; drop table t1; # # Bug #6206 ENUMs are not case sensitive even if declared BINARY # create table t1(c enum(0x9353,0x9373) character set sjis); show create table t1; insert into t1 values (0x9353); insert into t1 values (0x9373); select hex(c) from t1; drop table t1;
sql/sql_table.cc +14 −14 Original line number Diff line number Diff line Loading @@ -370,19 +370,19 @@ static int sort_keys(KEY *a, KEY *b) */ void check_duplicates_in_interval(const char *set_or_name, const char *name, TYPELIB *typelib) const char *name, TYPELIB *typelib, CHARSET_INFO *cs) { unsigned int old_count= typelib->count; const char **old_type_names= typelib->type_names; old_count= typelib->count; old_type_names= typelib->type_names; TYPELIB tmp= *typelib; const char **cur_value= typelib->type_names; for ( ; typelib->count > 1; cur_value++) unsigned int *cur_length= typelib->type_lengths; for ( ; tmp.count > 1; cur_value++, cur_length++) { typelib->type_names++; typelib->count--; if (find_type((char*)*cur_value,typelib,1)) tmp.type_names++; tmp.type_lengths++; tmp.count--; if (find_type2(&tmp, (const char*)*cur_value, *cur_length, cs)) { push_warning_printf(current_thd,MYSQL_ERROR::WARN_LEVEL_NOTE, ER_DUPLICATED_VALUE_IN_TYPE, Loading @@ -390,8 +390,6 @@ void check_duplicates_in_interval(const char *set_or_name, name,*cur_value,set_or_name); } } typelib->count= old_count; typelib->type_names= old_type_names; } /* Loading Loading @@ -571,7 +569,8 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, sql_field->pack_flag|=FIELDFLAG_BINARY; sql_field->unireg_check=Field::INTERVAL_FIELD; check_duplicates_in_interval("ENUM",sql_field->field_name, sql_field->interval); sql_field->interval, sql_field->charset); break; case FIELD_TYPE_SET: sql_field->pack_flag=pack_length_to_packflag(sql_field->pack_length) | Loading @@ -580,7 +579,8 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, sql_field->pack_flag|=FIELDFLAG_BINARY; sql_field->unireg_check=Field::BIT_FIELD; check_duplicates_in_interval("SET",sql_field->field_name, sql_field->interval); sql_field->interval, sql_field->charset); break; case FIELD_TYPE_DATE: // Rest of string types case FIELD_TYPE_NEWDATE: Loading