varchar类型是我们平时在设计数据库时经常用到了的类型,那varchar中的长度代表的是字符呢还是字节呢?
我们知道一个字节是8位,即有8个0或者1构成,一个字符由几个字节构成则取决于对应的编码格式,因此虽然字符字节这两个词长得挺像还是有很大的区别。
- UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节。
- Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节。
- GBK编码:一个中文占两个字节,一个英文占1个字节。
以上是编码知识,下面我们再了解一下数据库的varchar类型。对于不同的数据库varchar有不同的要求
- 在oracle中:
我们定义一个varchar(32)即表示是32个字节,因此对于汉字来说,数据库设置的编码格式不同,存储的数据量也是不一样的,如果存放UTF-8汉字时,只能存10个(每个汉字3字节)。
- 在mysql中:
4.0版本以下,varchar(32),指的是32字节,如果存放UTF8汉字时,只能存10个(每个汉字3字节)
5.0版本以上,varchar(32),指的是32字符,无论存放的是数字、字母还是UTF-8汉字(每个汉字3字节),都可以存放32个,最大大小是65532字节
知道了上面的知识,我们在定义数据库字段为varchar类型时,就需要留意我们用的数据库是什么,以及该字段存储的是汉字还是字母数字,避免存储数据时导致数据字段超长从而犯一些低级错误。