当我通过PHP注册表单向MySQL添加用户信息时,数据字段有限制(例如,名称是20个最大字符,电子邮件18个字符,附加信息200,传递12个字符等)
我应该在MySQL表中创建完全相同的字段,还是应该定义更长的字段?
这样做有什么好处,而不仅仅是创建所有字符串字段,例如500个字符?
将年龄存储为整数时,我应该使用小的int(即最大256)吗?
答案 0 :(得分:1)
一般来说,这并不重要。重要的部分是如何验证服务器端的信息。
确保输入的数据不超过列的大小。如果不这样做,则可能会遇到mysql将自动截断数据的问题。
不要限制密码大小。如果有人想输入200个字符的密码,请让他们。您应该将其存储在a storing hash而不是纯文本中,因此确切的长度不应该有所不同。
始终正确存储您的数据类型。如果您期望整数年龄,请将其存储在整数列中。没有理由将它存储在字符串列类型中。
就其余的限制而言,它确实比应用程序更依赖于应用程序。如果您希望200个字符信息限制,请将其存储在VARCHAR(200)
中。但是,如果您只是假设,请将其存储在TEXT
类型中,以便用户可以根据自己的喜好输入。但这比其他任何东西都更依赖于应用程序和用例......
答案 1 :(得分:1)
建议您对数据库列长度(对于varchar
)要宽松,但对应用程序执行大小/长度要严格。
业务逻辑可能会随着时间而改变。您的应用程序层将成为这些规则的守护者和执行者。
您的数据库不应经常根据不断变化的业务规则进行调整。定义varchar(100)
类型的列今天不需要任何费用。长度可变至100,因此您的性能和存储不会受到影响。
应用程序和数据库更改/维护费用昂贵;数据库存储很便宜。
其他一些详细建议,如果你愿意:
age
。使用数学(今日出生日期)从日期(出生日期)中获取。varchar(256)
或1024
并完成它们。让您的应用程序执行当天的业务规则。答案 2 :(得分:0)
如果您正在使用MyISAM表类型,那么如果您将记录长度保持为静态,则查询会更有效。因此,如果您可以使用固定大小的字段而不是varchar,那就更好了(只要记录中的所有字段都是静态的)。但是,您指定的整个字符数将在内存中被阻止,因此您需要确定内存使用情况是否更重要。
答案 3 :(得分:0)
除非您的应用程序很庞大并且您的数据库将会很庞大,否则这在性能方面应该非常重要。我想说你应该在MySQL领域给自己一些额外的空间,因为更改注册表格的最大长度要比以后的MySQL最大长度容易得多。使用smallint的年龄很好。或不。一般来说,你不应该允许字段占用比他们需要更多的空间,但我会给自己一些填充以防万一。但是,它应该不会产生太大影响。