相关疑难解决方法(0)

在SQL中选择CHAR over VARCHAR的用例有哪些?

我意识到如果我的所有值都是固定宽度的话,建议使用CHAR.但是,那又怎样?为什么不为所有文本字段选择VARCHAR只是为了安全.

sql t-sql sql-server

269
推荐指数
10
解决办法
16万
查看次数

为什么历史上人们使用255而不是256用于数据库字段量级?

您经常会看到数据库字段设置为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的做法似乎相当普遍,所以某个地方的人必须在一开始就为它辩护一个好的案例,有人能记住那个案例是什么吗?程序员在没有理由的情况下不会采用任何新的做法,这必须是新的一次.

sql rdbms-agnostic

182
推荐指数
10
解决办法
6万
查看次数

常见的MySQL字段及其相应的数据类型

我正在建立一个非常小的MySQL数据库,存储,名字,姓氏,电子邮件和电话号码,我正在努力为每个字段找到"完美"的数据类型.我知道没有一个完美的答案,但必须有一些常见的常用惯例,例如这些.例如,我已经确定一个未格式化的美国电话号码太大而无法存储为unsigned int,它必须至少是一个bigint.

因为我相信其他人可能会觉得这很有用,我不想把我的问题限制在我上面提到的字段中.

哪些数据类型适用于常见数据库字段?电话号码,电子邮件和地址等字段?

mysql database types

108
推荐指数
5
解决办法
11万
查看次数

为什么我应该为MySQL中的varchar选择任何长度超过255的长度?

我知道CHAR和VARCHAR之间的差异,

CHAR - 固定长度

VARCHAR - 可变长度(大小+ 1字节)

但是,我想知道是什么的具有一个varchar长度例如选项purpse VARCHAR(50),VARCHAR(100),VARCHAR(255)

这对我来说似乎没有意义,因为使用的实际空间取决于存储在数据库中的值.

所以我的问题是:

1)可以将我的所有varchar设置为255 2)为什么要指定任何其他长度?

mysql varchar char

36
推荐指数
2
解决办法
4万
查看次数

MySQL:为什么使用VARCHAR(20)而不是VARCHAR(255)?

可能重复:
对所有基于文本的字段使用泛型varchar(255)是否有缺点?

在MYSQL中,您可以为VARCHAR字段类型选择长度.可能的值为1-255.

但是如果你使用最大的VARCHAR(255)而不是VARCHAR(20),它有什么优势?据我所知,条目的大小仅取决于插入字符串的实际长度.

size(字节)=长度+ 1

因此,如果在VARCHAR(255)字段中有"示例"一词,则它将具有8个字节.如果你在VARCHAR(20)字段中有它,它也会有8个字节.有什么不同?

我希望你能帮助我.提前致谢!

mysql database varchar types

30
推荐指数
3
解决办法
6万
查看次数

为什么不将每个VARCHAR指定为VARCHAR(65535)?

由于Varchar字段的存储要求基于输入的字符串的实际长度,因此将每个Varchar字段指定为最大可能的缺点是什么:Varchar(65535)?那么,除了1个额外的字节,最大字段> 255个字符?

[存储需要长度为L的字符串:如果列值需要0 - 255字节,则为L + 1个字节,如果值可能需要超过255个字节,则为L + 2个字节]

谢谢!

mysql

27
推荐指数
2
解决办法
4181
查看次数

为数据库列提供额外的大小/长度是否有任何缺点?

我通常将所有varchars设置为255以确保安全.它在磁盘空间或其他方面有什么不同吗?拥有更大的varchars/ints /其他领域是否有任何不足之处?

mysql database database-design scalability

9
推荐指数
2
解决办法
298
查看次数

varchar(20)和varchar(50)是一样的吗?

我看到评论"如果varchar(20)列中有10到15个字符之间有5000万个值,而varchar(50)列中有5000万个值,它们将占用完全相同的空间.这就是整点varchar,而不是char." 任何人都可以告诉我原因吗?请参阅人员"姓名"字段的合理长度限制是什么?

mysql varchar

8
推荐指数
1
解决办法
2万
查看次数

如果你在同一个表中有一个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,如果是,在什么情况下?

mysql performance varchar char

5
推荐指数
1
解决办法
616
查看次数

显着增加 varchar 字段的长度是否会影响性能?

目前,我们有一个 varchar(255) 字段。我们的一位用户请求将该字段增加约 10 倍,达到 varchar(2048) 左右。考虑到他的用例,这似乎是一个合理的请求。

相关字段未编入索引,它不是任何联接的一部分,也不会包含在任何 where 子句中。

我意识到较小的增加(例如从 50 到 100)没有影响,但是这在尺寸增加得多的情况下仍然成立吗?

mysql

5
推荐指数
1
解决办法
1205
查看次数