[运行SHOW CREATE TABLE `my_table`;
时,我注意到表中的每个COLLATE utf8mb4_unicode_ci
,char
和varchar
列都显示了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。这似乎有点多余,因为排序规则是...
是,在表定义和列定义中使CHARACTER SET
和COLLATION
相同是多余的。
您只触摸了冰山一角。