MySQL创建表语句为每个char,varchar和text列包含多余的归类声明是否正常?

问题描述 投票:1回答:2

[运行SHOW CREATE TABLE `my_table`;时,我注意到表中的每个COLLATE utf8mb4_unicode_cicharvarchar列都显示了text。这似乎有点多余,因为排序规则已经在create语句的table_option部分中声明。

mysql> 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

此行为在MySQL 5.7和MySQL 8.0中均很明显,因此在其他版本中也很可能出现。

此行为是否正常并且可以接受,或者是表,数据库或MySQL实例配置错误的症状?

另一方面,由于可以为任何特定的列分别设置排序规则,所以最好显式地显示每个列的排序规则,以避免任何歧义或假设,即使在该列的排序规则与的排序规则匹配的情况下也是如此。桌子?

[运行SHOW CREATE TABLE`my_table`;时,我注意到对表中的每个char,varchar和text列都显示了COLLATE utf8mb4_unicode_ci。这似乎有点多余,因为排序规则是...

mysql database-design collation
2个回答
0
投票

是,在表定义和列定义中使CHARACTER SETCOLLATION相同是多余的。


0
投票

您只触摸了冰山一角。

© www.soinside.com 2019 - 2024. All rights reserved.