字符集和整理不会出现在create table的列定义中

时间:2017-08-10 21:02:28

标签: mysql mysql-5.7

我有这个奇怪的问题。

在安装在Ubuntu服务器16.04中的MySQL 5.7.18中,我创建了一个这样的表:

CREATE TABLE `test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`SURNAME` varchar(108) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `SURNAME` (`SURNAME`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=' (Enc.)'

但是,如果我执行此指令:

SHOW CREATE TABLE test;

我没有看到我在CREATE TABLE指令中定义的字符集和整理。

显然,创建完成后没有错误或警告。

目前,我已将数据库的字符集设置为utf8,并将整理设置为utf8_general_ci

任何人都知道这种行为的原因吗?如果是,我可以做些什么来解决这个问题?

P.S。:如果这篇文章是重复的或其他内容,请不要杀了我。

谢谢。

洛伦佐。

更新

我做了另一个测试。如果我使用SHOW CREATE TABLE使用不同的排序规则(utf8_bin)和不同的字符集(utf8),我可以看到我在创建表的指令中使用的定义。

现在,我有了这个新问题。列定义中的字符集和排序规则必须不同(例如,utf8和utf8_bin)?

再次感谢。

洛伦佐。

2 个答案:

答案 0 :(得分:0)

您是否尝试过this

CREATE TABLE tbl_name (column_list)
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]]

CHARACTER SET名称。

您只能指定其中一个,另一个默认设置。

答案 1 :(得分:0)

洛伦佐,

您没有看到指定排序规则的原因是您为字符集指定了默认排序规则。每个字符集都有一个默认排序规则。你花了额外的精力来指定collat​​ion(utf8_general_ci),这是utf8的默认值。例如,如果你指定了排序规则(utf8_unicode_ci),你会在SHOW命令中看到它。

CREATE TEMPORARY TABLE `lang_test` (
`mystr` varchar(16) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

CREATE TEMPORARY TABLE `lang_test2` (
`mystr` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci