文章目录
- 255=2^8-1 ,很多时候用到255却步凑整到256,这是为啥呢?
- 一番了解
- 总结
255=2^8-1 ,很多时候用到255却步凑整到256,这是为啥呢?
比如下面的两种情况:
- RabbitMQ的routing_key 和 binding_key 的最大长度255 字节。
- Navicat添加字段的时候默认给长度限制255
一番了解
255字节对比256字节在数据库字段定义(如MySQL中的VARCHAR
)时,具有以下优势:
-
索引效率:
- 当使用
InnoDB
存储引擎时,对于VARCHAR
字段,索引的最大长度限制为767字节。由于VARCHAR(255)
在UTF-8编码下(每个字符最多3字节)可以使用的最大字节数为765(255 * 3),这几乎达到了InnoDB索引长度的上限,因此可以更有效地利用索引空间。 - 相比之下,
VARCHAR(256)
需要使用两个字节来记录字符串的长度,这减少了可用于索引的实际数据长度,并可能导致索引效率降低。
- 当使用
-
存储空间:
VARCHAR
字段的长度值(即字符串的长度)需要额外的存储空间来记录。对于VARCHAR(255)
,只需要一个字节来记录长度,而对于VARCHAR(256)
及以上,则需要两个字节。因此,使用VARCHAR(255)
可以节省一个字节的存储空间。
-
性能:
- 由于
VARCHAR(255)
在长度记录和索引效率方面更优化,因此在处理大量数据时,使用VARCHAR(255)
可能会带来更好的性能表现。
- 由于
-
标准化和最佳实践:
- 在许多数据库设计和开发实践中,
VARCHAR(255)
被视为一个“黄金标准”或“最佳实践”,因为它在存储效率、索引效率和性能之间达到了良好的平衡。
- 在许多数据库设计和开发实践中,
综上所述,255字节相比256字节在数据库字段定义时具有索引效率、存储空间、性能和标准化等多方面的优势。因此,在大多数情况下,选择VARCHAR(255)
而不是VARCHAR(256)
是一个更好的选择。
RabbitMQ中routing_key和binding_key的长度被设定为255字节而不是256字节,这主要是基于以下几个方面的考虑:
-
标准化和通用性:在计算机科学中,许多协议和规范都采用了255作为某种限制或边界值。这可能是因为255是一个二进制数为8位的最大整数(即11111111),它提供了一个清晰且易于理解的边界。RabbitMQ选择255字节作为routing_key和binding_key的长度限制,可能是为了与其他系统或协议保持一致,从而提高其标准化和通用性。
-
性能考虑:虽然增加一个字节(从255到256)在理论上可能不会对大多数系统产生显著的性能影响,但在处理大量消息和并发请求时,任何微小的性能差异都可能被放大。通过将长度限制设定为255字节,RabbitMQ可以在一定程度上优化其内部处理机制,从而提高整体性能。
-
避免潜在问题:在某些情况下,使用256字节可能会导致一些潜在的问题。例如,某些系统或协议可能无法正确处理超过255字节的字段值。通过将长度限制设定为255字节,RabbitMQ可以避免与这些系统或协议兼容性问题。
-
简单性和易用性:对于开发者来说,使用255字节作为长度限制意味着他们不需要担心超过这个限制的问题。这简化了开发和调试过程,并提高了系统的易用性。
综上所述,RabbitMQ选择255字节作为routing_key和binding_key的长度限制是基于标准化、性能、避免潜在问题和简单性等方面的考虑。这个限制为开发者提供了一个清晰、可靠和易于使用的边界值。
总结
最根本的还是255二进制只用到了8位,而256用了9位,计算机使用的机器语言正是二进制,长度短就会带来存储空间、性能各刚面的优势。同理:,128(十进制) = 10000000(二进制),127(十进制)=1111111(二进制)…都有同样的效果。