mysql数据类型

时间:2011-01-12 14:53:34

标签: mysql varchar

我的数据库中的大多数表都有varchar类型的数据,长度设置为36,用于填充本机创建的guid。 varchar是最适合存储guid值的数据类型还是mysql中的任何其他类型?请解释

5 个答案:

答案 0 :(得分:2)

您可能需要查看PROCEDURE ANALYSE。根据表中已有的内容,可以帮助建议适当的数据类型。

这是一个blog post,它也讨论了PROCEDURE ANALYZE,也可能有所帮助。

答案 1 :(得分:1)

这是一个很好的问题。我在许多地方看到他们使用varchar来表示看起来像数字的不同类型的ID。那么为什么不使用整数呢?嗯,根据我的经验,有三个主要案例:

  1. 虽然它们是数字,但它们可能太大了。例如,对于32位数字(64位无符号整数的最大值为20位),您将无法使用整数(即使是64位大整数)。

  2. 某些数字有特殊格式。例如,电话号码可能如下所示:+44(12)3456789。现在显然,+,(和)不是数字的一部分,你可以在没有它们的情况下调用数字,但这是通常的格式,所以使用整数变量,你将无法存储它。

  3. 将来您可能会更改您的ID以包含字母,因此最好允许从头开始的字母以避免以后更改数百万条记录。

  4. 希望有所帮助。

答案 2 :(得分:1)

如果您的GUID始终为36且不为null,请使用CHAR而不是VARCHAR。它将节省空间,因为VARCHAR必须为每一行存储一个长度前缀。

此外,如果您的所有列都是固定长度,则在某些情况下会提高性能,因为数据库可以更有效地扫描行。

MySQL Reference Manual - The CHAR and VARCHAR Types

答案 3 :(得分:1)

这完全取决于“最合适”的含义。

varchar(36)的优点是简单。您可以按原样存储GUID,并轻松阅读。

但如果您担心列占用的磁盘空间量,那么您有几个选择:

varchar(36)= 37个字节 char(36)= 36个字节 char(32)= 32个字节(只删除连字符) binary(16)= 16个字节(删除连字符并取消确定GUID以获取二进制字符串)

因此,如果您担心磁盘空间,您会发现二进制文件(16)比varchar(36)好得多。

以下是从MySQL中的GUID获取二进制(16)字符串的示例:

unhex(replace(uuid(),'-',''))

答案 4 :(得分:0)

我的意思是,varchar允许使用每个字符,并且通常像number数据类型一样防止溢出。所以......好吧,如果你希望你的GUID包含数字字符之外的大值或值,那么你就是金色。