任何表 ID
使用:INT(11)。
MySQL indexes 将能够以最快的速度解析 int 列表。
任何安全性
使用:BINARY(x),或BLOB(x)。
您可以将安全令牌等以十六进制形式直接存储在 BINARY(x) 或 BLOB(x) 中。要从 binary-type 检索,请使用 SELECT HEX(field)... 或 SELECT ... WHERE field = UNHEX("ABCD....")。
任何日期
使用:DATETIME、DATE 或 TIME。
如果您需要同时存储日期和时间(而不是一对字段),请始终使用 DATETIME,因为 DATETIME 索引更适合 MySQL 中的日期比较。
任何真假
使用:BIT(1)(仅限 MySQL 8。)否则,使用 BOOLEAN(1)。
BOOLEAN 实际上只是TINYINT(1) 的别名,它实际上存储了 0 到 255(不完全是真/假,是吗?)。
任何你想调用 `SUM()`、`MAX()` 或类似函数的东西
使用:INT(11)。
VARCHAR 或其他类型的字段不适用于SUM() 等函数。
任何超过 1,000 个字符的内容
使用:文本。
最大限制为 65,535。
超过 65,535 个字符
使用:MEDIUMTEXT。
最大限制为 16,777,215。
超过 16,777,215 个字符
使用:LONGTEXT。
上限为 4,294,967,295。
名字,姓氏
使用:VARCHAR(255)。
UTF-8 字符每个可见字符可以占用三个字符,并且某些文化不区分名字和姓氏。此外,文化可能对哪个名字是first和哪个名字是last存在分歧。您应该将这些字段命名为 Person.GivenName 和 Person.FamilyName。
电子邮件地址
使用:VARCHAR(256)。
电子邮件路径的定义是在 1982 年的 RFC821 中设置的。电子邮件的最大限制是在 2001 年由 RFC2821 设置的,而这些限制在 2008 年由 RFC5321 保持不变。 (参见章节:4.5.3.1. 大小限制和最小值。)RFC3696,2004 年出版,错误地将电子邮件地址限制引用为320 字符,但这是一个“仅限信息”的 RFC,明确“没有定义任何标准” "根据它的介绍,所以忽略它。
电话
使用:VARCHAR(255)。
您永远不知道电话号码何时会以“1800...”、“1-800”或“1-(800)”的形式出现,或者它是否以“ext. 42”结尾,或“问苏珊”。
邮政编码
使用:VARCHAR(10)。
您将获得类似12345 或12345-6789 的数据。使用验证来清理此输入。
网址
使用:VARCHAR(2000)。
官方标准支持的 URL 比这长得多,但很少有现代浏览器支持超过 2,000 个字符的 URL。见this SO answer: What is the maximum length of a URL in different browsers?
价格
使用:DECIMAL(11,2)。
它上升到 11。