MySQL中的二进制数据

如何在 MySQL 中存储二进制数据?

0
额外 编辑
意见: 19
额外 作者 juergen d,
@Nevir:你有什么特别的信息?你觉得缺乏 @ phpguy's@Mat's 的答案?
额外 作者 eggyal,
对不起,我并不是想要得到这个奖励(用SO来跑到UI bug中),但是不能删除赏金
额外 作者 Nevir,

8 答案

phpguy的答案是正确的,但我认为在那里的附加细节中存在很多混淆。

基本答案是在 BLOB 数据类型/属性域中。 BLOB 是二进制大对象的缩写,该列数据类型专用于处理二进制数据。

请参阅 MySQL的相关手册页面

0
额外

我强烈建议存储在关系数据库中的二进制数据。关系数据库设计用于处理固定大小的数据;这就是他们的表现力量所在:请记住 Joel关于数据库如此之快如此之快的旧文章。因为它从一个记录移动到另一个记录需要恰好1个指针增量。如果您添加未定义且大小不一的BLOB数据,则会提高性能。

相反,将文件存储在文件系统中,并将文件名存储在数据库中。

0
额外
我没有倒下,但可能是因为他暗示你永远不应该这样做,而不是在大多数时候说这是个坏主意。我一般同意他的观点,但不是100%的情况。可以考虑性能以外的其他因素。例如,我正在研究一些性能无关紧要的事情。其他因素,如集中,简单和备份意味着在这种情况下存储在数据库中是有道理的。另一个常见原因是复制。
额外 作者 YeB,

可用此处提供更好的存储实施。 您将遇到Florian实施的问题。

0
额外

虽然你没有说出你正在存储的内容,并且你可能有很好的理由这样做,但答案通常是'作为文件系统引用',而实际的数据在某处的文件系统上。

http://www.onlamp.com/pub/a /onlamp/2002/07/11/MySQLtips.html

0
额外

The question also arises how to get the data into the BLOB. You can put the data in an INSERT statement, as the PHP example shows (although you should use mysql_real_escape_string instead of addslashes). If the file exists on the database server, you can also use MySQL's LOAD_FILE

0
额外

虽然不应该有必要,但您可以尝试 base64 编码数据并将其解码。这意味着数据库将只有ascii字符。它需要更多的空间和时间,但是与二进制数据有关的任何问题都将被消除。

0
额外

这取决于你想存储的数据。上面的例子使用了 LONGBLOB 数据类型,但你应该知道还有其他的二进制数据格式:

TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
VARBINARY
BINARY

每个人都有自己的用例。如果它是已知的(短)长度(例如打包数据),则通常 BINARYVARBINARY 会起作用。他们有能力吨指数附加的好处。

0
额外

当我需要存储二进制数据时,我总是使用 VARBINARY 格式,如 byd0nut 所介绍的。

You can find documentation at MySQL website under documented topic 12.4.2 The BINARY and VARBINARY Types

If you are asking what are advantagese, please look at question why-varbinary-instead-of-varchar

0
额外