Bug #46239 mysql doesn't show what collation was used if that collation is the default

Submitted: 16 Jul 2009 19:06 Modified: 19 Mar 2018 17:56
Reporter: Shane Bester (Platinum Quality Contributor) Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: DDL Severity:S4 (Feature request)
Version:5.0.82, 5.1.37 OS:Any
Assigned to: Assigned Account CPU Architecture:Any

[16 Jul 2009 19:06] Shane Bester
Description:
if you create a table with a character column and specify it's charset and collation, the output of 'show create table' doesn't show the collation if the collation used was the default for the charset.

example: both tables are created with explicit COLLATE options for columns `a`, but 'show create table' only shows one of them:

mysql> show create table t1;
+-------+-------------------------------------------------------
| Table | Create Table
+-------+-------------------------------------------------------
| t1    | CREATE TABLE `t1` (
  `a` char(1) character set utf8 default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+-------------------------------------------------------
1 row in set (0.00 sec)

mysql> show create table t2;
+-------+-------------------------------------------------------
| Table | Create Table
+-------+-------------------------------------------------------
| t2    | CREATE TABLE `t2` (
  `a` char(1) character set utf8 collate utf8_bin default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+-------------------------------------------------------
1 row in set (0.00 sec)

If i specified the collation i want it always to be shown in show create table!
What if the server is recompiled with another default collation? what happens?

How to repeat:
drop table if exists t1,t2;
create table t1(a char(1) charset utf8 collate utf8_general_ci) charset=latin1;
create table t2(a char(1) charset utf8 collate utf8_bin) charset=latin1;
show create table t1;
show create table t2;

#notice collation is not shown for t1.

Suggested fix:
always put the collation in the show create table output, even if it's the default one.
[16 Jul 2009 19:21] Valeriy Kravchuk
Thank you for the bug report. Verified just as described with recent bzr threes:

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.0.85    | 
+-----------+
1 row in set (0.00 sec)

mysql> drop table if exists t1,t2;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> create table t1(a char(1) charset utf8 collate utf8_general_ci)
    -> charset=latin1;
Query OK, 0 rows affected (0.00 sec)

mysql> create table t2(a char(1) charset utf8 collate utf8_bin)
    -> charset=latin1;
Query OK, 0 rows affected (0.01 sec)

mysql> show create table t1;
+-------+----------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                             |
+-------+----------------------------------------------------------------------------------------------------------+
| t1    | CREATE TABLE `t1` (
  `a` char(1) character set utf8 default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 | 
+-------+----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table t2;
+-------+---------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                              |
+-------+---------------------------------------------------------------------------------------------------------------------------+
| t2    | CREATE TABLE `t2` (
  `a` char(1) character set utf8 collate utf8_bin default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 | 
+-------+---------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
[16 Jul 2009 21:07] Peter Laursen
huh .. I thought it was a *feature*! no collation displayed => default collation was defined. 9 months since I first noticed this!
[21 Jul 2009 5:10] Alexander Barkov
This is an intentional behaviour, to reduce "SHOW CREATE TABLE"
output size. 

However, having a full "CREATE TABLE" could be useful in some cases.

Reasonable feature request.
[21 Jul 2009 5:11] Alexander Barkov
One more comment: it works this way since version 4.1.0 when
we introduced collations in MySQL. There's no regression here.
[9 Dec 2009 7:35] Shane Bester
Bar, reducing the output size of SHOW CREATE TABLE is not a useful argument here. What we need is accurate information!
[15 Dec 2009 7:35] Alexander Barkov
Shane, I agree full information is better for reading dumps
or seeing at "SHOW CREATE TABLE" output. So this is a reasonable
feature request.

However, from dumping and restoring point of view it's safe anyway.

Even if mysql was compiled for example
"--default-character-set=utf8 --default-collation=utf8_unicode_ci"

it only means that when you do "CREATE DATABASE", you get
"CHARACTER SET utf8 COLLATE utf8_unicode_ci" by default.

The default collation for utf8 is STILL utf8_general_ci.
So there's no any ambiguity depending on compilation flags here.

If the future we'll probably allow to change the default collation
for a character set. So full information will be important someday!
[7 Nov 2017 6:39] Shane Bester
this bug comes to light now that 8.0 has different default collation for utf8mb4
See:
  https://bugs.mysql.com/bug.php?id=88373
[9 Jan 2018 20:44] Sven Sandberg
Workaround:
SELECT TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = name;
SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = name;
[19 Mar 2018 17:56] Paul DuBois
Posted by developer:
 
Fixed in 8.0.11.

Previously, SHOW CREATE TABLE did not show collation for a column if
the collation was the same as the table default, even if the
collation was explicitly specified at table-creation time. Now, SHOW
CREATE TABLE always shows the column collation if the collation was
explicitly specified, even if the collation is the same as the table
default.
[12 Apr 2018 5:39] Erlend Dahl
Bug#89606 PLEASE PRINT DEFAULT COLLATION IN DUMP/PUMP/SHOW CREATE TABLE

Bug#89241 Modify SHOW CREATE TABLE to provide full charset and collation

were marked as duplicates.
[4 Mar 2024 5:05] Shane Bester
see https://bugs.mysql.com/bug.php?id=114195

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

Page generated in 0.046 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.