Nun*_*uno 4 mysql mariadb utf-8 mysql-8.0 mariadb-10.5
我有一个VARCHAR(80) utf8mb4
专栏,我正在测试添加一些 ASCII 和表情符号字符,并使用LENGTH()
和CHAR_LENGTH()
来理解差异。
通过阅读不同的地方,我的理解是,utf8mb4
列上的每个字符将占用 4 个字节。LENGTH()
然而,如果我理解为给我特定内容在该字段上的实际大小,情况似乎可能并非如此。
包含“aaaa”内容的行比包含“”的行占用的存储空间更少,这是否正确?
实际上,我的答案在文档中:\n https://mariadb.com/kb/en/unicode/
\n\n\n每个字符使用一到三个字节的 UTF-8 编码。基本拉丁字母、数字和标点符号使用一个字节。欧洲和中东字母大多适合 2 个字节。韩语、中文和日语\n表意文字使用 3 字节。不存储增补字符。
\nutf8mb4 -- 与 utf8 相同,但以四个字节存储增补字符。
\n
另外,根据https://mariadb.com/kb/en/data-type-storage-requirements/
\n\n\n字符串数据类型
\n
\n在下面的描述中,M 是声明的列长度(以字符或字节为单位),而 len 是值的实际长度(以字节为单位)。
\nVARCHAR(M) -- 如果列为 0 \xe2\x80\x93 255 字节,则为 len + 1 个字节;如果列可能需要超过 255 个字节,则为 len + 2 个字节
因此,对于VARCHAR(80) utf8mb4
,
\n80x4 > 255,因此带有“aaaa”的字段将占用 6 个字节 (len + 2)
归档时间: |
|
查看次数: |
2818 次 |
最近记录: |