【问题标题】:MYSQL - field type for a file name?MYSQL - 文件名的字段类型?
【发布时间】:2012-08-14 16:54:34
【问题描述】:

了解我的数据库后,在我的应用程序中的某个时间点,用户将能够上传一张(或多张)照片。我的朋友告诉我,使用文件名比使用一团文本更好。我应该为此使用 varchar 还是 varbinary?

此外,如果用户要上传更多图片(假设最大值为 10),最好为图片创建一个表并创建一个连接表,例如 userspictures,还是将所有图片存储在一个字符串中会更好会用逗号或类似的东西分隔吗?

非常感谢您的帮助。

【问题讨论】:

标签: php mysql database database-design


【解决方案1】:

将所有图片存储在逗号分隔的字符串中将违反第一范式,这会导致查询效率低下。您必须将数据简化为原子形式,因此在这种情况下,请始终形成一个单独的表来存储各个数据项。

【讨论】:

  • 是的,感谢您的回答。我想我需要重新阅读规范化。
【解决方案2】:

正如你朋友所说,最好只将文件名存储在数据库中。 我建议VARCHAR(255)

我真的建议您为多个文件创建另一个表:

CREATE TABLE photos (
  id INTEGER UNSIGNED AUTO_INCREMENT,
  user_id INTEGER UNSIGNED,
  filename VARCHAR(255) UNIQUE NOT NULL,

  PRIMARY KEY(id)
);

SELECT id, filename FROM photos WHERE user_id = [user_id]

【讨论】:

  • 谢谢您的快速回答!顺便说一句,我还在主键中添加了 UNSIGNED 和 AUTO_INCREMENT。
  • 不客气。如果您觉得有用,可以将我的回答标记为已接受。请参阅此处了解更多信息:meta.stackexchange.com/a/5235/191400
【解决方案3】:

您应该使用varchar 数据类型而不是blob 数据库中的图像文件名,因为blob(二进制大对象)数据类型用于存储大量二进制数据。将图像保存在服务器上并将图像名称传递给数据库。您为多个文件创建另一个表,这很好。

【讨论】:

  • 谢谢你的快速回复:)
  • @cupidvogel:我想对你说一句话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多