Commit 30d7290c authored by jimw@rama.(none)'s avatar jimw@rama.(none)

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.
parent bd183d42
...@@ -381,3 +381,14 @@ DROP TABLE t1; ...@@ -381,3 +381,14 @@ DROP TABLE t1;
select cast(NULL as decimal(6)) as t1; select cast(NULL as decimal(6)) as t1;
t1 t1
NULL 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
...@@ -204,7 +204,19 @@ SELECT CAST(v AS DECIMAL), CAST(tt AS DECIMAL), CAST(t AS DECIMAL), ...@@ -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; CAST(mt AS DECIMAL), CAST(lt AS DECIMAL) from t1;
DROP TABLE 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; 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
...@@ -3089,7 +3089,7 @@ opt_bin_mod: ...@@ -3089,7 +3089,7 @@ opt_bin_mod:
| BINARY { Lex->type|= BINCMP_FLAG; }; | BINARY { Lex->type|= BINCMP_FLAG; };
opt_bin_charset: opt_bin_charset:
/* empty */ { } /* empty */ { Lex->charset= NULL; }
| ASCII_SYM { Lex->charset=&my_charset_latin1; } | ASCII_SYM { Lex->charset=&my_charset_latin1; }
| UNICODE_SYM | UNICODE_SYM
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment