CREATE TABLE `NewTable` (
`usname` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_bin
ROW_FORMAT=COMPACT
;
如果字段中输入了非 utf-8 字符,则该字段最多可存储 32 个字符。
而如果该字段中有utf-8字符,那么你可以在该字段中保存32个utf-8字符。
如果它只包含 utf-8 字符,该字段将占用多少字节?
如果utf-8字符将存储在其中多少字节?
传统模式会以任何方式影响这一点吗?
更改标题:添加“多少”一词 - 用于自动搜索,如果有人问类似问题。
括号
varchar
中的数字表示所用编码中的字符数。以字节为单位的长度直接取决于字段使用的编码CHARACTER SET
。For
utf8
mysql
使用最多 3 字节表示。因此,varchar(32)
数据本身最多会占用 3 * 32 = 96 个字节,再加上 1 或 2 个字节来存储数据的字节长度。96 小于 255,所以需要 1 个字节。总的来说,这varchar
将占用磁盘上的 1 到 97 个字节。有趣的一点是,在索引和内存中的任何排序/分组中,这个字段总是被扩展到最大字节长度。
细心的读者可能会对另外一件事感到惊讶——毕竟它
utf
最多可以占用 4 个字节。一个mysql
podutf8
只能存储 3 个字节。是的,在utf8
世界其他地方和- 不同的事物。当你尝试写一个4字节的(现在流行表情符号就是4字节的,也就是说,这根本不是外来的死语言,而是实际遇到的数据)会返回一个错误,不会写任何东西。添加了完整的编码。utf8
mysql
utf8
mysql
utf8
mysql 5.5
utf8mb4
并且
utf8mb4
每个字符已经最多使用 4 个字节。这会稍微改变字节长度结果:32 个字符将占用 32*4 = 128 个字节,再加上一个来存储字符串的长度。这种情况下占用的字节数将比存储字符串的字节表示多 1。粗略地说,如果一个字符串中有2个单字节字符和2个双字节字符,那么就需要7个字节。有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html
是的,如果使用韩文/中文/日文字符,那么每个字符可能需要 3 个字节。有关此内容,请参阅http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-utf8.html