mysql - SQL 中 VARCHAR(x) 和 VARCHAR(y) 的区别

标签 mysql sql database database-design varchar

我了解到 VARCHAR 占用唯一需要的内存,这与 CHAR 不同,CHAR 无论是否需要,总是占用相同数量的内存。

我的问题:假设我有一个字段VARCHAR(50),我知道如果它需要存储30个字符,它只会占用30个字节并且不会超过(假设1个字符需要一个字节)。那么为什么我什至要提到 50 或 30 或任何上限,因为它只会占用所需的内存。

更新: 既然不会占用无用的内存,为什么还要提到上限?

最佳答案

UPDATE: Why do I have to mention the upper limit since there will be no useless memory occupied?

如果您使用 final_value = left(provided_value, 30) 之类的东西清理您的输入,那么这对您的数据库来说不是问题。如果您愿意,可以将其设置为 varchar(255)

设置最大限制的想法是确保您不会错误地发送比实际计划更多的字符。

  1. 记忆每张表每一列的数据大小限制,以后代码维护会很痛苦。无论如何,您都需要这样做,但要将表定义视为相关信息的单一来源。

  2. 是否仅通过您的应用或网站中的一段代码将表写入 (insert/update)?如果有另一个数据库接口(interface),比如 REST API 监听器,如果您不再输入相同的值,就会遇到数据不一致的问题——这正是数据库能够避免的。

  3. 如果编码错误(或黑客攻击)绕过您的应用程序/网站对数据的控制(大小限制或更糟),那么至少您的数据库仍会正确维护数据。

关于mysql - SQL 中 VARCHAR(x) 和 VARCHAR(y) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13739222/

相关文章:

mysql - 如何在 mySQL 中使用自动递增列

javascript - 在检索到最后一条记录后从 postgresql 中提取记录

php - "On delete cascade"三张表。错误无法添加或更新子行

sql - 如何在 DolphinDB 中加载文本文件的指定列?

database - Liquibase Grails 数据库迁移

php - 数组到字符串错误

mysql - 寻找从未订购过意大利辣香肠披萨的顾客

php - 将值插入数据库无法正常工作?

mysql - 从 'games' 的列表中获取不同的行

sql - 原始SQL是用汇编语言还是C语言编写的?