将c ++ int转换为VARBINARY并再次返回

时间:2013-03-21 04:31:47

标签: c++ mysql int type-conversion varbinary

我刚刚发现除了VAR数据类型之外的所有数据类型都不会改变它们的LENGTH。由于可能INT autoincrement PRIMARY字段可能永远不会改变1BIGINT中的BIGINT字段,因此这对我来说效率非常低8个字节。

我有很多列,一旦插入就不会改变但有可能变大。我不想使用所有VARBINARY列,而是使用int代替。

我想在c ++中将数据操作为VARBINARY,并将其作为{{1}}存储在mysql中。

如何在c ++中进行这些转换?

2 个答案:

答案 0 :(得分:3)

高度建议不要这样做。

如果查看VARCHAR的MySQL文档,您会看到

  

VARCHAR值存储为1字节或2字节长度前缀加数据。长度前缀表示值中的字节数。

让我们采用像0xDEADBEEF2B84F00D这样的64位值。如果将其存储在BIGINT字段中,则需要8个字节(它存储为二进制值。)

如果你将它存储为VARCHAR,即使你假设数字总是十六进制,我们说的是长度字段的1或2个字节,然后是十六进制字符的另外16个字节! 18个字节,由于必须转换为/从ASCII转换而失去性能,这是一个可怕的权衡!

让我们看一下相反的情况,0x01。存储在BIGINT字段中,它仍然是8个字节。使用之前的相同约定,它可能是数据库中的3个字节。在我看来,甚至还不值得。特别是当您考虑数据库使用一堆ASCII数据执行得有多糟糕时。

就是不要这样做。按照设计的方式使用数据库。

答案 1 :(得分:1)

我认为这是一个失败的主张。除非你可以证明你的数据不适合你的系统而不诉诸kludges,我认为你最好坚持使用整数类型的整数值。否则,什么是阻止某人在您的数字ID列中插入“hello”,以及您有多高兴查询看起来不像数字的数字?它整体上可能也会变慢。