在这种情况下建议存储字符串的方法?

时间:2014-03-11 14:27:51

标签: mysql

我存储字符串,99.5 +%少于255个字符,因此我将它们存储在VARCHAR(255)中。

问题是,其中一些可能是4kb左右。什么是存储这些的最佳方式?

  • 选项#1:将它们存储在另一个带有指向main的指针的表中。
    • 选项#1.0:添加INTDEFAULT NULL,指针将存储在那里
    • 选项#1.1:指针将存储在VARCHAR(255)列中,例如'AAAAAAAAAAA[NUMBER]AAAAAAAAAAAA'
  • 选项#2:将VARCHAR的大小从255增加到32767

以上哪项最佳,Option #1.0Option #1.1Option #2,表现明智?

3 个答案:

答案 0 :(得分:1)

增加字段的大小以适合字符串的最大大小。除非需要,否则VARCHAR不会使用该空间。

  

VARCHAR值存储为1字节或2字节长度前缀加   数据。长度前缀表示值中的字节数。一个   如果值不超过255个字节,则列使用一个长度字节,   如果值可能需要超过255个字节,则为两个长度字节。

http://dev.mysql.com/doc/refman/5.0/en/char.html

答案 1 :(得分:1)

MySQL Definition表示VARCHAR(N)将占用L + 1 bytes if column values require 0 – 255 bytes, L + 2 bytes if values may require more than 255 bytes,其中L是存储字符串的字节长度。

所以我猜选项#2非常好,因为小字符串仍然会占用比32767字节更少的空间。

编辑:

还想象一下,当你真正想要查询一个字符串而不知道它是否超出长度时,1.0和1.1会引发无数问题。

答案 2 :(得分:1)

Option #2显然是最好的。它只是在每个值的大小上添加1个字节,并且不需要在第二个表的字段中合并任何复杂的连接。