我听说在MsSQL / Access数据库中,如果你声明一个长度为100的varchar,它会声明每行100个字符,即使该列中只有一个字符。
我有两个问题。 第一:这是真的吗?如果是的话,这在MySQL中是否也能像这样工作?
为什么我这么问:
我正在使用mysql工作,我遇到了一个包含128个longtext-columns的表数据库。这背后的原因是“我们不能确定在这些列中存储了多少数据。有时它是1个字符,有时是数千个。”我想知道这是否是存储方式的正确方法,或者他必须做一些改变。
答案 0 :(得分:2)
不,VARCHAR
适用于可变长度文本,而CHAR
是固定长度。 number参数是文本的字符限制,但VARCHAR仅占用您在该行中输入的实际字符的空间(+一些字节用于存储使用的长度)。
MySQL,Microsoft SQL Server以及几乎所有关系数据库与VARCHAR
的工作方式相同。每列占用一行中最小的空间,但使用VARCHAR
,将存储文本+字节的字节存储文本的长度。输入的文本不会仅表示用于将“0”保存为长度的1或2个字节。
如果您不知道将输入多少文本数据,请在MySQL中使用LONGTEXT
或在MS-SQL中使用NVARCHAR(MAX)
。此数据类型允许您有效地存储无限量的文本(最多为数据库本身的行大小限制)。它只是标准VARCAHR
的更大,无限长度版本。
答案 1 :(得分:1)
对于SQL Server,答案是否定的。来自documentation on MSDN:
varchar [(n | max)]
可变长度的非Unicode字符串数据。 ñ 定义字符串长度,可以是1到8,000之间的值。最大 表示最大存储大小为2 ^ 31-1个字节(2 GB)。该 存储大小是输入数据的实际长度+ 2个字节。该 varchar的ISO同义词是字符变量或字符变化。
有人可能会混淆VARCHAR和CHAR。 CHAR数据类型需要基于允许的最大大小的固定存储量。
修改强>
重读你的问题我并不完全确定我是否遵循了你的意思。如果您没有提到所需的存储空间,请忽略。