Browse Source

Bug #17903: cast to char results in binary

The character set was not being properly initialized in CAST() with
  a type like "CHAR(2) BINARY", which resulted in incorrect results or
  even a crash.


mysql-test/r/cast.result:
  Add new results
mysql-test/t/cast.test:
  Add new regression test
sql/sql_yacc.yy:
  Make sure Lex->charset is set to NULL when nothing follows BINARY
  in type declaration.
pull/374/head
unknown 20 years ago
parent
commit
2fc276d54f
  1. 11
      mysql-test/r/cast.result
  2. 14
      mysql-test/t/cast.test
  3. 2
      sql/sql_yacc.yy

11
mysql-test/r/cast.result

@ -381,3 +381,14 @@ DROP TABLE t1;
select cast(NULL as decimal(6)) as t1;
t1
NULL
set names latin1;
select hex(cast('a' as char(2) binary));
hex(cast('a' as char(2) binary))
61
select hex(cast('a' as binary(2)));
hex(cast('a' as binary(2)))
6100
select hex(cast('a' as char(2) binary));
hex(cast('a' as char(2) binary))
61
End of 5.0 tests

14
mysql-test/t/cast.test

@ -204,7 +204,19 @@ SELECT CAST(v AS DECIMAL), CAST(tt AS DECIMAL), CAST(t AS DECIMAL),
CAST(mt AS DECIMAL), CAST(lt AS DECIMAL) from t1;
DROP TABLE t1;
# Bug @10237 (CAST(NULL DECIMAL) crashes server)
#
# Bug #10237 (CAST(NULL DECIMAL) crashes server)
#
select cast(NULL as decimal(6)) as t1;
#
# Bug #17903: cast to char results in binary
#
set names latin1;
select hex(cast('a' as char(2) binary));
select hex(cast('a' as binary(2)));
select hex(cast('a' as char(2) binary));
--echo End of 5.0 tests

2
sql/sql_yacc.yy

@ -3089,7 +3089,7 @@ opt_bin_mod:
| BINARY { Lex->type|= BINCMP_FLAG; };
opt_bin_charset:
/* empty */ { }
/* empty */ { Lex->charset= NULL; }
| ASCII_SYM { Lex->charset=&my_charset_latin1; }
| UNICODE_SYM
{

Loading…
Cancel
Save