gpt4 book ai didi

mysql - 在 MySQL 中使用与模式默认值不同的列字符集有什么缺点吗?

转载 作者:行者123 更新时间:2023-11-29 11:15:06 24 4
gpt4 key购买 nike

在我的应用程序中,我将 ids 作为 char(16) 存储在表中,计算为 hex(uuid_short()),以使其可与需要“key”为 char 或 varchar 的 memcached 插件一起使用。示例值:57F328CF000003

如果我将其保留为默认字符集 utf8,如 docs它将使用 3x16 字节,因为 utf8 最多可以有 3 个字节。然而,对于我的用例中可能的值(1-9 位数字和 A-F),1 字节 ascii 字符集就足够了。

我不确定仅更改列或仅更改表以使用 ascii 字符集是否是一个好主意?使用与默认模式或表不同的字符集是否有任何性能或设计影响?对整理有任何影响吗? 目前我使用默认字符集“utf8”和默认排序规则“utf8_general_ci”。

最佳答案

当然有可能有不同的 CHARACTER SETs (和/或 COLLATIONs )位于同一表的不同列中。

表的字符集只是默认;它没有其他作用。

对于十六进制、IP 地址、邮政编码等,强烈建议使用 CHARACTER SET ascii ( latin1 几乎一样好)。

CHAR(16)表示有 16 个字符,并且是固定长度,因此长度为 16 * 最长可能的字符。对于 utf8 来说是 48 个字节。浪费了 32 个字节。

VARCHAR(16)长度为 1 字节,加上最多 16 个字符所需的字节,因此在 16 个十六进制字符的情况下为 17 个字节。

使用 ascii 可以提高性能优势,因为可以使表变小。做吧。

UUIDs当您有数百万行时(以及 MD5 等)会遇到不同的问题 - 它们非常随机,从而导致表中出现大量跳转。如果表太大而无法缓存在 RAM 中,性能可能会变得糟糕

何时 JOINing例如,您的 uuid 上的表,两个表中的 uuid 声明必须具有相同的字符集和排序规则。

关于mysql - 在 MySQL 中使用与模式默认值不同的列字符集有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39886899/

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