gpt4 book ai didi

mysql - 字符集和排序规则不会出现在创建表的列定义中

转载 作者:行者123 更新时间:2023-11-29 18:31:44 25 4
gpt4 key购买 nike

我有一个奇怪的问题。

在 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

有人知道这种行为的原因吗?如果是,我能做些什么来解决这个问题?

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

非常感谢。

洛伦佐。

更新

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

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

再次感谢。

洛伦佐。

最佳答案

洛伦佐,

您看不到指定的排序规则的原因是您为字符集指定了默认排序规则。每个字符集都有一种默认排序规则。您付出了额外的努力来指定排序规则 (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

关于mysql - 字符集和排序规则不会出现在创建表的列定义中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45623423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com