vlambda博客
学习文章列表

mysql在设计表时,列用varchar还是varbinary?

有时候,我们在设计一个表结构时,通常一个字段char和varchar,binary和varbinary我们都知道区别,但是有时候总是在varchar和varbinary上拿不定,用varchar还是用varbinary呢,我也拿不准。。。本文是我的学习,有不妥之处,请指教。。

几个概念:

字节byte:

计算机内存中的存储单元,1个字节8位。我们通常说内存多大,数据多大是指字节。

字符char:

我们看到的文字符号字母。它在计算机中是编码(utf8,gb2312)成字节表示。

char_length():

Returns the length of the string str, measured in characters. A multibyte character counts as a single character. This means that for a string containing five 2-byte characters, LENGTH() returns 10, whereas CHAR_LENGTH() returns 5.

返回字符串以字符个数表示的大小。

length():

Returns the length of the stringstr, measured in bytes. A multibyte character counts as multiple bytes. This means that for a string containing five 2-byte characters, LENGTH() returns 10, whereas CHAR_LENGTH() returns 5.

返回字符串以字节个数表示的大小。

char和varchar:

The CHAR and VARCHAR types are declared with a length that indicates the maximum number of characters you want to store. For example, CHAR(30) can hold up to 30 characters.

如果表字段这样定义,表示这列最大存储的字符个数

binary和varbinary:

The permissible maximum length is the same for BINARY and VARBINARY as it is for CHAR and VARCHAR, except that the length for BINARY and VARBINARY is a length in bytes rather than in characters.

如果表字段这个定义,表示这列最大字节表示个数。

那么对于我们在设计表的时候,定义列到底用VARCHAR还是VARBINARY呢?

我觉得这与你的程序设计有关。

比如一篇文章来说,文章标题肯定是一个字符串,那么就用VARCHAR,比如文章的关键字,那么肯定是个数组,那么我建议存储为VARBINARY.

还有重要的一点,当列设计为VARBINARY(X)时,X表示字节数,如果采用UTF-8存储,那么就需要设想一下,你此列最多需要多少字符,那么需要字符数x3个字节。否则存储时有可以截断。。