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个字节。否则存储时有可以截断。。