mysql建表时varchar和char的长度及区别

 2024-01-29 00:02:43  阅读 0

MySQL 5.0.3以下版本的数据库类型最大长度限制为255,数据范围可以是0~255。

在0.3及以上版本中,数据类型的长度支持到65535,这意味着可以存储65532字节的数据。 起始位和结束位占用3个字节,也就是说在5.0中。 3以下版本中需要以固定TEXT或BLOB格式存储的数据,在更高版本中可以以可变长度存储,这样可以有效减小数据库文件的大小。

如果写入的长度大于设定的长度,则默认截断后面的部分。

类型

该类型用于存储可变长度字符串,是最常见的字符串数据类型。 它比固定长度类型更节省空间,因为它仅使用必要的空间(例如,较短的字符串使用较少的空间)。 有一个例外。 如果MySQL表是用=FIXED创建的,每一行都会以固定长度存储,这会浪费空间。

需要使用1或2个额外的字节来记录字符串的长度:如果列的最大长度小于或等于255字节,则仅使用1个字节来表示,否则使用2个字节。 假设使用字符集,一个(10)列需要11字节的存储空间。 (1000)这一列需要1002字节,因为需要2字节来存储长度信息。

它节省了存储空间,因此也有助于性能。 但是,由于该行的长度是可变的,因此可能会使该行比原来的长度更长,从而导致额外的工作。 如果行占用的空间增长并且页面中没有更多空间可存储,不同的存储引擎会以不同的方式处理这种情况。 例如,如果将行拆分为不同的片段进行存储,则需要拆分页面以使行能够适合页面。 某些其他存储引擎可能永远不会更新原始数据位置中的数据。

适用情况

以下情况是合适的:

字符串列的最大长度远大于平均长度

列很少更新,因此碎片不是问题

使用像 UTF-8 这样的复杂字符集,每个字符使用不同数量的字节存储

字符型

CHAR类型是定长的:MySQL总是根据定义的字符串长度分配足够的空间。 当存储 CHAR 值时,MySQL 会删除所有尾随空格。 CHAR 值将根据需要用空格填充,以便于比较。

CHAR适合存储非常短的字符串,或者当所有值都接近相同长度时。 例如,CHAR 非常适合存储密码的 MD5 值,因为它是固定长度值。 对于经常变化的数据,CHAR也更好,因为定长的CHAR类型不容易产生碎片。 对于非常短的列,CHAR 比率也能提高存储空间效率。 例如,CHAR(1) 仅用于存储 Y 和 N 值。 如果使用单字节字符集,则只需要一个字节,但是(1)需要两个字节,因为记录长度多了一个字节。

(5) 和 (200) 之间的差异

如果我们用(5)和(200)来存储'hello',我们知道两者的空间开销是相同的。 那么我们可以保持长度总是很大吗? 使用较短的色谱柱有什么优点吗?

事实证明有很大的优势。 较长的列消耗更多内存,因为 MySQL 通常分配固定大小的内存块来保存内部值。 当使用内存临时表进行排序或操作时,这尤其糟糕。 使用磁盘临时表排序时也同样糟糕。

字段类型是否型_char是什么字段类型_字段类型是否

例如,如果CHAR(4)和(4)中存储不同的数据类型,则结果如下表所示:

字段类型是否_字段类型是否型_char是什么字段类型

因此,最好的策略是只分配您真正需要的空间。

1、 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。
2、 varchar可变长度,可以设置最大长度;适合用在长度可变的属性。
3、 text不设置长度, 当不知道属性的最大长度时,适合用text。
按照查询速度: char最快, varchar次之,text最慢。

总结

1.长度的区别,char范围是0~255,最长是64k,但是注意这里的64k是整行的长度,其他的都要考虑进去,如果不存在null的话就会也占一位。 不同的字符集有不同的有效长度。 比如utf8最大长度为21845,排除其他,但一般情况下存储是够用的。 如果遇到大文本,可以考虑使用文本,最大可达4G。

2.从效率上来说,基本是char>>text,但是如果你使用的是引擎,建议使用char代替。

3. char 和 可以有默认值,但text 不能指定默认值。

4、数据库存储仍然需要选择合适的数据类型,这会对性能产生一定的影响。 这里有两个零碎的记录。 对于int类型,如果不需要访问负值,最好将它们相加。 对于where语句中经常出现的字段,可以考虑添加索引。 整数字段特别适合添加索引。

当我们为字符串类型字段选择类型时,可以考虑以下几个方面来决定是否应该选择CHAR:

该字段数据集的平均长度与最大长度是否相差很小,若相差很小优先考虑CHAR类型,反之,考虑VARCHAR类型。
若字段存储的是MD5后的哈希值,或一些定长的值,优先选取CHAR类型。
若字段经常需要更新,则优先考虑CHAR类型,由于CHAR类型为定长,因此不容易产生碎片。
对于字段值存储很小的信息,如性别等,优先选取CHAR类型,因为VARCHAR类型会占用额外的字节保存字符串长度信息

总之,当我们可以选择CHAR类型时,或者当空间消耗相对不是影响因素的重点时,尽量选择CHAR类型,因为在其他方面,CHAR类型或多或少都有优势。 当空间消耗成为一个很大的影响因素时,我们会考虑使用类型。

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码