我有这个奇怪的问题。
在安装在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)?
再次感谢。
洛伦佐。
答案 0 :(得分:0)
您是否尝试过this?
CREATE TABLE tbl_name (column_list)
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]]
CHARACTER SET
名称。
您只能指定其中一个,另一个默认设置。
答案 1 :(得分:0)
洛伦佐,
您没有看到指定排序规则的原因是您为字符集指定了默认排序规则。每个字符集都有一个默认排序规则。你花了额外的精力来指定collation(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