Mysql内存效率和类型声明

时间:2016-03-23 13:06:51

标签: mysql sql sql-server memory

我听说在MsSQL / Access数据库中,如果你声明一个长度为100的varchar,它会声明每行100个字符,即使该列中只有一个字符。

我有两个问题。 第一:这是真的吗?如果是的话,这在MySQL中是否也能像这样工作?

为什么我这么问:

我正在使用mysql工作,我遇到了一个包含128个longtext-columns的表数据库。这背后的原因是“我们不能确定在这些列中存储了多少数据。有时它是1个字符,有时是数千个。”我想知道这是否是存储方式的正确方法,或者他必须做一些改变。

2 个答案:

答案 0 :(得分:2)

  1. 不,VARCHAR适用于可变长度文本,而CHAR是固定长度。 number参数是文本的字符限制,但VARCHAR仅占用您在该行中输入的实际字符的空间(+一些字节用于存储使用的长度)。

  2. MySQL,Microsoft SQL Server以及几乎所有关系数据库与VARCHAR的工作方式相同。每列占用一行中最小的空间,但使用VARCHAR,将存储文本+字节的字节存储文本的长度。输入的文本不会仅表示用于将“0”保存为长度的1或2个字节。

  3. 如果您不知道将输入多少文本数据,请在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数据类型需要基于允许的最大大小的固定存储量。

修改

重读你的问题我并不完全确定我是否遵循了你的意思。如果您没有提到所需的存储空间,请忽略。