Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Indexing InnoDB是否在索引中以扩展形式存储多字节字符串?_Indexing_Utf 8_Innodb_Multibyte_Utf8mb4 - Fatal编程技术网

Indexing InnoDB是否在索引中以扩展形式存储多字节字符串?

Indexing InnoDB是否在索引中以扩展形式存储多字节字符串?,indexing,utf-8,innodb,multibyte,utf8mb4,Indexing,Utf 8,Innodb,Multibyte,Utf8mb4,InnoDB是否在索引中以扩展形式存储多字节字符串 例如,每个utf8mb4字符串是否需要4个字节 我试着从信息\u模式.tables.index\u长度进行经验测试,但是,该值不是确定性的,因此它不是一种可靠的方法。我在文档中也找不到这个概念 编辑:为了澄清,问题是,简而言之:在CHAR(1)NOT NULL列(不考虑索引元数据)上的InnoDB索引中存储一个1字节utf8mb4字符(例如,U+0050)需要多少字节?utf8字符串中的所有字符都存储为可变长度编码。根据其代码点,每个字符使用1

InnoDB是否在索引中以扩展形式存储多字节字符串

例如,每个
utf8mb4
字符串是否需要4个字节

我试着从
信息\u模式.tables.index\u长度
进行经验测试,但是,该值不是确定性的,因此它不是一种可靠的方法。我在文档中也找不到这个概念


编辑:为了澄清,问题是,简而言之:在
CHAR(1)NOT NULL
列(不考虑索引元数据)上的InnoDB索引中存储一个1字节utf8mb4字符(例如,
U+0050
)需要多少字节?

utf8字符串中的所有字符都存储为可变长度编码。根据其代码点,每个字符使用1、2、3或4个字节。字符串可以混合编码,因为每个代码点在每个字节的初始位中标识其长度


ASCII子集中的字符将仅使用1个字节。

utf8字符串中的所有字符都存储为可变长度编码。根据其代码点,每个字符使用1、2、3或4个字节。字符串可以混合编码,因为每个代码点在每个字节的初始位中标识其长度


ASCII子集中的字符将仅使用1个字节。

例如,每个utf8mb4字符串字符是否需要4个字节?--每个字符最多占用4个字节

您可以使用
LENGTH(col)
查找列中的字节数。
您可以使用
CHAR\u LENGTH(col)
查找列中的字符数

这两个数字的比例将介于1:1和4:1之间。英语将是1:1;西欧:1:1至2:1之间;俄语和希腊语将是2:1;大多数亚洲语言将是3:1;带有表情符号的字符串可能接近4:1

除非进行编码,否则在MySQL表中找不到6个字符“U+0050”。不要那样做


information\u schema.tables.index\u length
表示所有辅助索引使用了多少空间。这与您的问题无关的原因有很多——B树开销、块开销、行开销、列开销、指向子节点的指针等等。

例如,每个utf8mb4字符串是否占用4个字节?--每个字符最多占用4个字节

您可以使用
LENGTH(col)
查找列中的字节数。
您可以使用
CHAR\u LENGTH(col)
查找列中的字符数

这两个数字的比例将介于1:1和4:1之间。英语将是1:1;西欧:1:1至2:1之间;俄语和希腊语将是2:1;大多数亚洲语言将是3:1;带有表情符号的字符串可能接近4:1

除非进行编码,否则在MySQL表中找不到6个字符“U+0050”。不要那样做


information\u schema.tables.index\u length
表示所有辅助索引使用了多少空间。这与您的问题无关的原因有很多——B树开销、块开销、行开销、列开销、指向子节点的指针等等。

这个答案通常指UTF-8(而不是InnoDB utf8mb4),因此值得指出,@Marcus,UTF-8不允许将代码点编码为任何可以称为“扩展形式”的东西。它只允许一个代码点的一个字节序列表示。是的,我同意。需要明确的是,Tom所说的是每个代码点都有一个表示,而不是表示使用一个字节。:)好的,那么,为了澄清这个问题-在
CHAR(1)NOT NULL
列(不考虑索引元数据)的InnoDB索引中存储一个1字节utf8mb4字符(比如,
U+0050
)需要多少字节?一个单字节字符存储在一个字节中。这个答案通常指的是UTF-8(而不是InnoDB utf8mb4)所以值得指出的是,@Marcus,UTF-8不允许将代码点编码为任何可以称为“扩展形式”的东西。它只允许一个代码点的一个字节序列表示。是的,我同意。需要明确的是,Tom所说的是每个代码点都有一个表示,而不是表示使用一个字节。:)好的,那么,为了澄清这个问题-在
CHAR(1)NOT NULL
列(不考虑索引元数据)上的InnoDB索引中存储一个1字节utf8mb4字符(比如,
U+0050
)需要多少字节?一个单字节字符存储在一个字节中。