Javascript 为什么不为表中的每个字段使用varchar类型?
如果您是通过客户端JS的GET请求(假设对服务器db的大多数查询都是通过HTTP请求执行的)访问数据库,并且GET返回一个json字符串,那么如果返回的是字符串类型,那么数据库字段中的类型又有什么关系呢?比如为什么要为每个字段选择类型?有两个非常有效的理由不在所有字段中使用VARCHAR:Javascript 为什么不为表中的每个字段使用varchar类型?,javascript,mysql,Javascript,Mysql,如果您是通过客户端JS的GET请求(假设对服务器db的大多数查询都是通过HTTP请求执行的)访问数据库,并且GET返回一个json字符串,那么如果返回的是字符串类型,那么数据库字段中的类型又有什么关系呢?比如为什么要为每个字段选择类型?有两个非常有效的理由不在所有字段中使用VARCHAR: 如果API返回的值是JSON字符串,那么不是每个值都是字符串类型。JSON也可以包含数字:{name:“Steven”,age:29} 在API返回JSON字符串之前,数据库必须执行查询并提取要返回的数据。这
{name:“Steven”,age:29}
CHAR(50)
字段上按名称进行过滤比在VARCHAR
字段上按名称进行过滤要快Users
和Posts
,并且Posts
表有一个user\u id
字段。如果该ID是一个VARCHAR,那么加入这些表将比加入整数慢得多“23”
位于“3”
之前(按字母顺序),即使您希望3
位于23
之前(按数字顺序)。尝试将年龄存储为VARCHAR,然后说SELECT*FROM Users ORDER BY age
1000000
为4字节,而VARCHAR最多为19字节SELECT MAX(age)FROM Users
或SELECT AVERAGE(age)FROM Users
甚至SELECT(age/2)FROM Users
。这些都不适用于VARCHAR选择来自工人的总和(收入)
)上进行聚合,但不能在VARCHAR字段上进行聚合我相信其他人会提出更有效的理由,但上述内容足以让我们认识到VARCHAR并不是所有问题的答案。有两个非常有效的理由不在所有问题上都使用VARCHAR:
{name:“Steven”,age:29}
CHAR(50)
字段上按名称进行过滤比在VARCHAR
字段上按名称进行过滤要快Users
和Posts
,并且Posts
表有一个user\u id
字段。如果该ID是一个VARCHAR,那么加入这些表将比加入整数慢得多“23”
位于“3”
之前(按字母顺序),即使您希望3
位于23
之前(按数字顺序)。尝试将年龄存储为VARCHAR,然后说SELECT*FROM Users ORDER BY age
1000000
为4字节,而VARCHAR最多为19字节