MySQL二进制类型用法示例

时间:2013-12-02 19:59:21

标签: mysql

我有20个字符

'id' CHAR(20) NOT NULL CHARACTER SET latin1,

我可以使用二进制数据类型:

1)为了节省空间

2)加速搜索,因为id是主要索引?

如果是,怎么样?我需要将我的ID转换为十六进制吗?

1 个答案:

答案 0 :(得分:1)

MySQL的BINARY数据类型(如CHAR)包含固定长度的字符串。您仍然需要指定列的宽度,例如BINARY(20)。唯一的区别是MySQL将列中的数据视为原始字节而不是编码文本。

假设您在列中维护相同的数据,但只是将列的数据类型更改为BINARY(20)而不是CHAR(20) CHARACTER SET latin1,那么:

  1.   

    为了节省空间

    没有。由于latin1是一个单字节字符集,因此两个数据类型将占用每个字段20个字节。请参阅Data Type Storage Requirements

  2.   

    加快搜索速度,因为id是主要索引?

    不是真的。唯一的区别是通过在您选择的校对下进行比较所需的额外时间。如果这确实令人担忧(而且非常不应该),您可以简单地使用latin1_bin整理。

  3. 如果列实际上包含文本数据,您将不再受益于MySQL的自动转码和归类应用:因此依赖于此类行为的操作将需要明确询问MySQL(失去索引的好处)或者在应用层内执行它(确实可能证明非常昂贵)。

  4. 您实际上是否存在存储空间不足或搜索速度慢的问题?如果是这样,也许您应该相应地分析您的存储/查询,以确定资源被占用的位置;否则,我想起了Knuth的格言:过早优化是所有邪恶的根源

    如果在调查后发现您的问题确实存在于主键的长度上,您可以考虑使用代理值:例如: MySQL的SERIAL数据类型。