Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不为表中的每个字段使用varchar类型?_Javascript_Mysql - Fatal编程技术网

Javascript 为什么不为表中的每个字段使用varchar类型?

Javascript 为什么不为表中的每个字段使用varchar类型?,javascript,mysql,Javascript,Mysql,如果您是通过客户端JS的GET请求(假设对服务器db的大多数查询都是通过HTTP请求执行的)访问数据库,并且GET返回一个json字符串,那么如果返回的是字符串类型,那么数据库字段中的类型又有什么关系呢?比如为什么要为每个字段选择类型?有两个非常有效的理由不在所有字段中使用VARCHAR: 如果API返回的值是JSON字符串,那么不是每个值都是字符串类型。JSON也可以包含数字:{name:“Steven”,age:29} 在API返回JSON字符串之前,数据库必须执行查询并提取要返回的数据。这

如果您是通过客户端JS的GET请求(假设对服务器db的大多数查询都是通过HTTP请求执行的)访问数据库,并且GET返回一个json字符串,那么如果返回的是字符串类型,那么数据库字段中的类型又有什么关系呢?比如为什么要为每个字段选择类型?

有两个非常有效的理由不在所有字段中使用VARCHAR:

  • 如果API返回的值是JSON字符串,那么不是每个值都是字符串类型。JSON也可以包含数字:
    {name:“Steven”,age:29}
  • 在API返回JSON字符串之前,数据库必须执行查询并提取要返回的数据。这样做的速度越快,应用程序的速度就越快。VARCHAR字段的过滤速度非常慢,因为字段的实际数据存储在单独的磁盘页上,并且记录包含指向它的指针。因此,在
    CHAR(50)
    字段上按名称进行过滤比在
    VARCHAR
    字段上按名称进行过滤要快
  • 在连接表时,上述过滤速度慢的问题更加突出。假设您有两个表,如
    Users
    Posts
    ,并且
    Posts
    表有一个
    user\u id
    字段。如果该ID是一个VARCHAR,那么加入这些表将比加入整数慢得多
  • VARCHAR字段可能包含无效数据。一个人的年龄永远只能是一个数字。但是如果您有一个VARCHAR字段,那么您可以将某人的年龄作为“bob”输入数据库。这到底是什么意思?现在,您必须开始检查前端的坏数据,并且必须弄清楚发生时如何处理它
  • VARCHAR字段一次排序一个字符。这意味着
    “23”
    位于
    “3”
    之前(按字母顺序),即使您希望
    3
    位于
    23
    之前(按数字顺序)。尝试将年龄存储为VARCHAR,然后说
    SELECT*FROM Users ORDER BY age
  • VARCHAR字段比数值字段占用磁盘上更多的空间。整数可以存储在32位(4字节)中。但是,VARCHAR需要1-4字节的长度,4-8字节的指针指向数据存储的位置,加上实际数据的每个字符一个字节。这意味着整数的数字
    1000000
    为4字节,而VARCHAR最多为19字节
  • SQL数学操作在VARCHAR字段上不起作用。使用数字字段,您可以执行以下操作:
    SELECT MAX(age)FROM Users
    SELECT AVERAGE(age)FROM Users
    甚至
    SELECT(age/2)FROM Users
    。这些都不适用于VARCHAR
  • 这段时间我一直在比较VARCHAR和数值字段,但是SQL还提供了DATE、DATETIME和TIMESTAMP字段,所有这些字段都有自己方便的方法或逻辑。您可以减去两个日期字段以获得天数差。如果日期存储为varchar,则此操作将不起作用
  • 数字字段可以细分为整数字段(不接受小数点)和浮点字段(接受小数点)。这在存储诸如一间房子有多少间卧室(总是一个整数。拥有“半间卧室”意味着什么)之类的东西时,与存储诸如平方英尺之类的东西(如果一个房间大约是11.5英尺乘以13.5英尺,那么平方英尺可以合理地是分数)时非常重要
  • 可以在数字字段(
    选择来自工人的总和(收入)
    )上进行聚合,但不能在VARCHAR字段上进行聚合

  • 我相信其他人会提出更有效的理由,但上述内容足以让我们认识到VARCHAR并不是所有问题的答案。

    有两个非常有效的理由不在所有问题上都使用VARCHAR:

  • 如果API返回的值是JSON字符串,那么不是每个值都是字符串类型。JSON也可以包含数字:
    {name:“Steven”,age:29}
  • 在API返回JSON字符串之前,数据库必须执行查询并提取要返回的数据。这样做的速度越快,应用程序的速度就越快。VARCHAR字段的过滤速度非常慢,因为字段的实际数据存储在单独的磁盘页上,并且记录包含指向它的指针。因此,在
    CHAR(50)
    字段上按名称进行过滤比在
    VARCHAR
    字段上按名称进行过滤要快
  • 在连接表时,上述过滤速度慢的问题更加突出。假设您有两个表,如
    Users
    Posts
    ,并且
    Posts
    表有一个
    user\u id
    字段。如果该ID是一个VARCHAR,那么加入这些表将比加入整数慢得多
  • VARCHAR字段可能包含无效数据。一个人的年龄永远只能是一个数字。但是如果您有一个VARCHAR字段,那么您可以将某人的年龄作为“bob”输入数据库。这到底是什么意思?现在,您必须开始检查前端的坏数据,并且必须弄清楚发生时如何处理它
  • VARCHAR字段一次排序一个字符。这意味着
    “23”
    位于
    “3”
    之前(按字母顺序),即使您希望
    3
    位于
    23
    之前(按数字顺序)。尝试将年龄存储为VARCHAR,然后说
    SELECT*FROM Users ORDER BY age
  • VARCHAR字段比数值字段占用磁盘上更多的空间。整数可以存储在32位(4字节)中。但是,VARCHAR需要1-4字节的长度,4-8字节的指针指向数据存储的位置,加上实际数据的每个字符一个字节。这意味着整数的数字
    1000000
    为4字节,而VARCHAR最多为19字节
  • SQL数学操作在VARCHAR字段上不起作用。带数字