C++ 转换为c++;int到VARBINARY并再次返回

C++ 转换为c++;int到VARBINARY并再次返回,c++,mysql,int,type-conversion,varbinary,C++,Mysql,Int,Type Conversion,Varbinary,我刚刚发现,除了VAR之外,所有数据类型都不会改变它们的长度。这给我的印象是效率极低,因为在BIGINT列中的1占满8字节的地方,可能会有INT字段,如autoincrementPRIMARY,永远不会更改 我有很多列,一旦插入它们就不会改变,但它们可能很大。我不想使用所有BIGINT列,而是想使用VARBINARY < P> >我想在C++中把数据作为 int 操作,但在MySQL中存储为 ValDeB< > < /P> 如何在C++中实现这些转换? < p>我认为这是一个失败的命题。除非你

我刚刚发现,除了
VAR
之外,所有数据类型都不会改变它们的
长度。这给我的印象是效率极低,因为在
BIGINT
列中的
1
占满8字节的地方,可能会有
INT
字段,如
autoincrement
PRIMARY
,永远不会更改

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

< P> >我想在C++中把数据作为<代码> int <代码>操作,但在MySQL中存储为<代码> ValDeB< <代码> > < /P>
如何在C++中实现这些转换?

< p>我认为这是一个失败的命题。除非你能证明你的数据在你的系统中根本不适合你,否则我认为你最好还是坚持用整数类型来表示整数值。否则,如何防止有人在您的数字ID列中插入“hello”,以及您查询看起来不像数字的数字时有多高兴?总的来说可能会慢一些。

我认为这是一个失败的提议。除非你能证明你的数据在你的系统中根本不适合你,否则我认为你最好还是坚持用整数类型来表示整数值。否则,如何防止有人在您的数字ID列中插入“hello”,以及您查询看起来不像数字的数字时有多高兴?总体而言,速度可能也会较慢。

我强烈建议不要这样做

如果您查看MySQL文档,您将看到

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

让我们取一个64位的值,比如0xDEADBEEF2B84F00D。如果将其存储在
BIGINT
字段中,则需要8个字节(存储为二进制值)

如果您将其存储为
VARCHAR
,即使您假定数字始终为十六进制,我们说的长度字段是1或2个字节,然后是16个字节的十六进制字符!18个字节,并且由于必须转换为/转换为ASCII而导致性能损失,这是一个非常糟糕的权衡

让我们看看相反的情况,0x01。存储在
BIGINT
字段中,仍然是8字节。使用以前的相同约定,您的数据库中可能会有3个字节。在我看来,这根本不值得。特别是当你考虑一个ASCII数据时数据库会有多糟糕。

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

我强烈建议不要这样做

如果您查看MySQL文档,您将看到

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

让我们取一个64位的值,比如0xDEADBEEF2B84F00D。如果将其存储在
BIGINT
字段中,则需要8个字节(存储为二进制值)

如果您将其存储为
VARCHAR
,即使您假定数字始终为十六进制,我们说的长度字段是1或2个字节,然后是16个字节的十六进制字符!18个字节,并且由于必须转换为/转换为ASCII而导致性能损失,这是一个非常糟糕的权衡

让我们看看相反的情况,0x01。存储在
BIGINT
字段中,仍然是8字节。使用以前的相同约定,您的数据库中可能会有3个字节。在我看来,这根本不值得。特别是当你考虑一个ASCII数据时数据库会有多糟糕。


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

不要这样做。为每个字段使用正确的数据类型。您是否准备好在转换的两个阶段遭受严重的性能损失,无法“按常规方式”聚合整数数据,以及在排序
int
s时遇到严重困难?这是你不太担心的问题,因为可读性会下降:你的代码的读者会想知道你在想什么。你愿意做所有这些来节省几字节的磁盘空间吗?这几天非常便宜?@dasblinkenlight速度较慢,以最大空间效率抓取十亿行表中的两列,或者将所有
VARCHAR
s转换为
bit
s转换为
int
s?这是一个半nosqlsetup@JoeCoderGuy答案在很大程度上取决于您的网络设置,因为这可能是您最慢的链路,但很有可能这两个链路可以相互比较。如果有的话,我会使用。@dasblinkenlight我想你应该在答案中发布
varbinary
部分。我是在倒退。你知道如何将<代码> int >代码>转换为<代码>二进制< /代码>,然后在C++中返回吗?不要这样做。为每个字段使用正确的数据类型。您是否准备好在转换的两个阶段遭受严重的性能损失,无法“按常规方式”聚合整数数据,以及在排序
int
s时遇到严重困难?这是你不太担心的问题,因为可读性会下降:你的代码的读者会想知道你在想什么。你愿意做所有这些来节省几字节的磁盘空间吗?这几天非常便宜?@dasblinkenlight速度较慢,以最大空间效率抓取十亿行表中的两列,或者将所有
VARCHAR
s转换为
bit
s转换为
int
s?这是一个半nosqlsetup@JoeCoderGuy答案在很大程度上取决于您的网络设置,因为这可能是您最慢的链路,但很有可能这两个链路可以相互比较。如果有什么的话,我会告诉我们的