Bug #76329 COLLATE option not accepted in generated column definition

Submitted: 15 Mar 2015 21:07 Modified: 14 Jul 2015 14:45
Reporter: Mario Beck Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Parser Severity:S3 (Non-critical)
Version:5.7.6, 5.7.8, 8.0.0 OS:Any
Assigned to: Gleb Shchepa CPU Architecture:Any
Tags: auto generated columns, collate

[15 Mar 2015 21:07] Mario Beck
Description:
When defining a generated column and the datatype is CHAR or VARCHAR (TEXT probably as well?) it is possible to define a character set but it is not possible to define a collation.

How to repeat:
CREATE TABLE bla (i int);
ALTER TABLE bla ADD COLUMN t CHAR(42) CHARACTER SET utf8 COLLATE utf8_bin GENERATED ALWAYS AS ("foo bar");

Same statement without the COLLATE option works fine.

Suggested fix:
The interpreter should follow the documentation and accept the COLLATE option for character datatypes.
[16 Mar 2015 5:37] MySQL Verification Team
Hello Mario Beck,

Thank you for the report and test case.

Thanks,
Umesh
[16 Mar 2015 5:37] MySQL Verification Team
// 5.7.8

root@localhost [test] > show variables like '%version%';
+-------------------------+---------------------------------------------------------+
| Variable_name           | Value                                                   |
+-------------------------+---------------------------------------------------------+
| innodb_version          | 5.7.8                                                   |
| protocol_version        | 10                                                      |
| slave_type_conversions  |                                                         |
| version                 | 5.7.8-rc-enterprise-commercial-advanced                 |
| version_comment         | MySQL Enterprise Server - Advanced Edition (Commercial) |
| version_compile_machine | x86_64                                                  |
| version_compile_os      | Linux                                                   |
+-------------------------+---------------------------------------------------------+

root@localhost [test] > CREATE TABLE bla (i int);
Query OK, 0 rows affected (0.00 sec)

root@localhost [test] > ALTER TABLE bla ADD COLUMN t CHAR(42) CHARACTER SET utf8 COLLATE utf8_bin GENERATED ALWAYS AS ("foo bar");
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 'GENERATED ALWAYS AS ("foo bar")' at line 1
root@localhost [test] >

// 5.8.0
commit: a9992220039b548fc6529ecbeae75f4afcc048fc
date: 2015-03-14 06:45:26 +0100
build-date: 2015-03-14 17:51:23 +0100
short: a999222
branch: mysql-trunk

MySQL source 5.8.0
root@localhost [test] > CREATE TABLE bla (i int);
Query OK, 0 rows affected (0.00 sec)

root@localhost [test] > ALTER TABLE bla ADD COLUMN t CHAR(42) CHARACTER SET utf8 COLLATE utf8_bin GENERATED ALWAYS AS ("foo bar");
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 'GENERATED ALWAYS AS ("foo bar")' at line 1
[13 Jul 2015 16:34] Paul DuBois
Noted in 5.7.8, 5.8.0 changelogs.

The data type for generated columns did not permit the COLLATE
attribute.
[14 Jul 2015 14:45] Mario Beck
I don't think that changing the docs is an adequate fix for the problem. I do not consider this "closed".
We need the COLLATE option for auto-generated columns to enable specific use cases, e.g. http://mablomy.blogspot.de/2015/03/auto-generated-columns-in-mysql-57-two.html
This should at least remain as an RFE.
[15 Jul 2015 16:31] Paul DuBois
"did not permit" = past tense.

Revised changelog entry:

The data type for generated columns now permits the COLLATE
attribute.
[18 Jun 2016 21:24] Omer Barnir
Posted by developer:
 
Reported version value updated to reflect release name change from 5.8 to 8.0

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.040 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.