Bug #20377 | enum implemented incorrectly? | ||
---|---|---|---|
Submitted: | 10 Jun 2006 23:17 | Modified: | 11 Jun 2006 8:24 |
Reporter: | Roman Lamotkin | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: Data Types | Severity: | S4 (Feature request) |
Version: | 5.0.22 | OS: | Windows (Windows 98 SE) |
Assigned to: | CPU Architecture: | Any |
[10 Jun 2006 23:17]
Roman Lamotkin
[11 Jun 2006 6:58]
Valeriy Kravchuk
Thank you for a problem report. Sorry, but you can not use expressions (including user variables and even CAST) in ENUM. Take a look at sources (syntax specification, similar to BNF), sql/sql_yacc.yy: field_spec: ... | ENUM {Lex->interval_list.empty();} '(' string_list ')' opt_binary { $$=FIELD_TYPE_ENUM; } ... string_list: text_string { Lex->interval_list.push_back($1); } | string_list ',' text_string { Lex->interval_list.push_back($3); }; So, it is not a bug, but intended behaviour. I can mark this as verified feature request, if you want, or a documentation request (to describe this clearly at http://dev.mysql.com/doc/refman/5.0/en/enum.html).
[11 Jun 2006 8:19]
Roman Lamotkin
Well, let me turn it into feature request ... (and documentation clarification request as well)
[11 Jun 2006 8:24]
Valeriy Kravchuk
So, it is a reasonable and verified feature request to support constant-based expressions in ENUM(...) data type declaration. This page, http://dev.mysql.com/doc/refman/5.0/en/enum.html, should also clearly state that expressions are not allowed now.
[11 Jun 2006 23:21]
Jon Stephens
The Manual already says: An ENUM is a string object with a value chosen from a list of allowed values that are enumerated explicitly in the column specification at table creation time. "Enumerated explicitly" means that you can't imply a string value, you must provide one. However, I have added the following to the ENUM section: An enumeration value must be a quoted string literal; it may not be an expression, even one that evaluates to a string value. This means that you also may not employ a user variable as an enumeration value.
[10 Oct 2008 11:17]
Alexander Barkov
Using CAST in create statement is perhaps too complex. Adding this syntax would be enough: CREATE TABLE t1 (a enum(_cp1251'str1','str2','str3')) charset utf8; Currently it returns syntax error: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '_cp1251'test','test1','test2')) charset utf8' at line 1