title: Is it normal for a MySQL create table statement to include redundant collation declarations for every char, varchar, and text column?
body: <p>When running <code>SHOW CREATE TABLE `my_table`;</code>, I notice that <code>COLLATE utf8mb4_unicode_ci</code> is shown for every <code>char</code>, <code>varchar</code>, and <code>text</code> column in the table. This seems a bit redundant since the collation is already declared in the <em>table_option</em> portion of the create statement.</p>
  
  <pre><code>mysql&gt; SHOW CREATE TABLE `my_table`;
  | Table    | Create Table
  | my_table | CREATE TABLE `my_table` (
  ...
    `char_col_1` char(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
    `varchar_col_1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
    `varchar_col_2` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
    `varchar_col_3` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
    `text_col_1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
  ...
  ) ENGINE=InnoDB AUTO_INCREMENT=1816178 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
  </code></pre>
  
  <p>This behavior is noticeable in both MySQL 5.7 and MySQL 8.0 and therefore most likely in other versions as well.</p>
  
  <p>Is this behavior normal and acceptable, or is it a symptom of something that is misconfigured either with the table, database, or MySQL instance?</p>
  
  <p>On the other hand, since collation can be individually set for any specific column, perhaps it is better to explicitly display the collation for every column to avoid any ambiguity or assumptions, even in cases where the collation of the column matches the collation of the table?</p>