CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id)
);
现在,我有几个问题:
每个session_id的长度为32个字符,但在表中我们有varchar(40)。为什么varchar(40)而不是char(32)?
像182.111.112.113这样的ip_address的长度为15个字符,但在表格中我们有varchar(16)。为什么varchar(16)而不是varchar(15)?
每个user_agent的长度为50个字符,但在表中我们有varchar(50)。为什么varchar(50)而不是char(50)?
有人可以在这个问题上回答我吗?请!
注意:我的默认存储引擎是InnoDB。
答案 0 :(得分:1)
你根本不需要担心。查看MySQL文档中的数据类型:
http://dev.mysql.com/doc/refman/5.0/en/char.html
总结一下,varchar扩展到指定限制之前所需的值。因此,如果你只使用50个字符,那么数据库中只需要50个字符而不是60个字符。因此,可能只是开发人员需要非常均匀的数字。
答案 1 :(得分:0)
他们可能选择使用40个字符而不是32个字符,只是为了防止以后某些标准发生变化或者修改了id_session编码的方式。 Varchar而不是char ...好吧,char在末尾添加空格(它是固定长度类型,http://dev.mysql.com/doc/refman/5.0/en/char.html)以完全适合40个字节。当你检索它时,它会回到32个字节,但我想他们使用Varchar来节省存储空间。
我不知道。遗憾!
也许使用varchar作为标准?我不知道,但在我的情况下,我倾向于有条不紊地使用varchar而不是char。
请记住,我的所有答案都只是假设,我不清楚它们中的任何一个(特别是第二个xD)。
祝你好运
答案 2 :(得分:0)
您可以将其更改为varchar(32)
for IPV6
user_agent是一个var,所以将其更改为varchar(255)