我意识到如果我的所有值都是固定宽度的话,建议使用CHAR.但是,那又怎样?为什么不为所有文本字段选择VARCHAR只是为了安全.
您经常会看到数据库字段设置为255个字符,传统/历史原因是什么?我认为它与分页/内存限制和性能有关,但255和256之间的区别总是让我感到困惑.
varchar(255)
Run Code Online (Sandbox Code Playgroud)
考虑到这是容量或幅度,而不是索引器,为什么255优先于256?是为某种目的保留的字节(终止符还是null或其他)?
推测varchar(0)是无意义的(零容量)?在这种情况下,2 ^ 8的空间应该是256?
是否有其他量级可以提供性能优势?例如,varchar(512)的性能低于varchar(511)或varchar(510)?
对于所有新旧关系数据库,此值是否相同?
免责声明 - 我是开发人员而不是DBA,我使用适合我的业务逻辑的字段大小和类型,但我想知道这种偏好的历史原因,即使它不再相关(甚至是更多,如果它仍然相关).
感谢您的回答,似乎有一些共识认为一个字节用于存储大小,但这并不能在我的脑海中明确解决问题.
如果元数据(字符串长度)存储在相同的连续内存/磁盘中,则有一定意义.1个字节的元数据和255个字节的字符串数据非常适合彼此,并且适合256个连续的存储字节,这可能是整洁的.
但是......如果元数据(字符串长度)与实际字符串数据(可能在主表中)分开存储,那么将字符串数据的长度约束一个字节,只是因为它更容易只存储1个字节的整数元数据似乎有点奇怪.
在这两种情况下,它似乎都是一个微妙的可能取决于数据库的实现.使用255的做法似乎相当普遍,所以某个地方的人必须在一开始就为它辩护一个好的案例,有人能记住那个案例是什么吗?程序员在没有理由的情况下不会采用任何新的做法,这必须是新的一次.
我正在建立一个非常小的MySQL数据库,存储,名字,姓氏,电子邮件和电话号码,我正在努力为每个字段找到"完美"的数据类型.我知道没有一个完美的答案,但必须有一些常见的常用惯例,例如这些.例如,我已经确定一个未格式化的美国电话号码太大而无法存储为unsigned int,它必须至少是一个bigint.
因为我相信其他人可能会觉得这很有用,我不想把我的问题限制在我上面提到的字段中.
哪些数据类型适用于常见数据库字段?电话号码,电子邮件和地址等字段?
我知道CHAR和VARCHAR之间的差异,
CHAR - 固定长度
VARCHAR - 可变长度(大小+ 1字节)
但是,我想知道是什么的具有一个varchar长度例如选项purpse VARCHAR(50),VARCHAR(100),VARCHAR(255)
这对我来说似乎没有意义,因为使用的实际空间取决于存储在数据库中的值.
所以我的问题是:
1)可以将我的所有varchar设置为255 2)为什么要指定任何其他长度?
在MYSQL中,您可以为VARCHAR字段类型选择长度.可能的值为1-255.
但是如果你使用最大的VARCHAR(255)而不是VARCHAR(20),它有什么优势?据我所知,条目的大小仅取决于插入字符串的实际长度.
size(字节)=长度+ 1
因此,如果在VARCHAR(255)字段中有"示例"一词,则它将具有8个字节.如果你在VARCHAR(20)字段中有它,它也会有8个字节.有什么不同?
我希望你能帮助我.提前致谢!
由于Varchar字段的存储要求基于输入的字符串的实际长度,因此将每个Varchar字段指定为最大可能的缺点是什么:Varchar(65535)?那么,除了1个额外的字节,最大字段> 255个字符?
[存储需要长度为L的字符串:如果列值需要0 - 255字节,则为L + 1个字节,如果值可能需要超过255个字节,则为L + 2个字节]
谢谢!
我通常将所有varchars设置为255以确保安全.它在磁盘空间或其他方面有什么不同吗?拥有更大的varchars/ints /其他领域是否有任何不足之处?
我看到评论"如果varchar(20)列中有10到15个字符之间有5000万个值,而varchar(50)列中有5000万个值,它们将占用完全相同的空间.这就是整点varchar,而不是char." 任何人都可以告诉我原因吗?请参阅人员"姓名"字段的合理长度限制是什么?
我刚刚阅读了这个问题的接受答案,这给我留下了这个问题.
以下是该答案的引用:
"不过既然你标记这个问题与MySQL,我会提到具体的MySQL提示:当您的查询或隐生成一个临时表,例如排序时GROUP BY,VARCHAR字段将转换为CHAR获得与固定宽度行工作的优势如果你将大量VARCHAR(255)字段用于不需要那么长的数据,这可能会使临时表非常大."
据我所知,其优点CHAR是你获得了固定宽度的行,所以不是VARCHAR在同一个表中混乱了吗?CHAR当你VARCHAR在同一张桌子上使用时,有什么好处吗?
这是一个例子:
表格CHAR:
CREATE TABLE address (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
street VARCHAR(100) NOT NULL,
postcode CHAR(8) NOT NULL,
PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)
表没有CHAR:
CREATE TABLE address (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
street VARCHAR(100) NOT NULL,
postcode VARCHAR(8) NOT NULL,
PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)
表格会不会CHAR比表格更好CHAR,如果是,在什么情况下?
目前,我们有一个 varchar(255) 字段。我们的一位用户请求将该字段增加约 10 倍,达到 varchar(2048) 左右。考虑到他的用例,这似乎是一个合理的请求。
相关字段未编入索引,它不是任何联接的一部分,也不会包含在任何 where 子句中。
我意识到较小的增加(例如从 50 到 100)没有影响,但是这在尺寸增加得多的情况下仍然成立吗?
mysql ×8
varchar ×4
database ×3
char ×2
sql ×2
types ×2
performance ×1
scalability ×1
sql-server ×1
t-sql ×1