- char和varchar
char和varchar初始化的时候,都需要指定长度,例如char(10),varchar(10),括号中的10表示最长可以存储多少个字符。无论这个字符是中文还是英文,最长可存储10个,但是实际这个字符串占的长度可能是不一样的。跟这个字符在数据库当前的字符集下所占的空间有关。例如“qwertyuiop”和“我的家在江苏省南京市”,数据库字符集utf8mb4,两个字符串都是10个字符,但是第一个字符串实际占10个字节,第二个字符串实际占3×10=30个字节。因为一个中文字符在utf8mb4下占3个字节。
可以用函数length()查询字段所占的实际字节数,例如:“select length(id) from utf8mb4”
如果启用了“strict SQL mode”,插入数据时超过规定的长度,会报错(我们使用的一般是这个模式);未启用,超过最大长度的数据会被截取删除并且触发一个warning。
UTF-8字符集每个字符最多使用三个字节,并且只包含基本多语言面 (Basic Multilingual Plane,BMP)字符。
utf8mb4 字符集使用最多每字符四个字节支持补充字符。截图最后的Maxlen表示每个字符最多使用的字节。