System.out.println("123123123123阿萨德发的发生123123123123123阿萨德发的发生123123123123阿萨德发的发生123123123123123123123123阿萨德发的发生123123123123阿萨德发的发生123123123123123123123阿萨德发的发生12312123123123123阿萨德发的发生123123123123阿萨德发的发生1231231231233123123123123123123阿萨德发的发生123123123123阿萨德发的发生123123123123".length());
System.out.println("123123123123阿萨德发的发生123123123123123阿萨德发的发生123123123123阿萨德发的发生123123123123123123123123阿萨德发的发生123123123123阿萨德发的发生123123123123123123123阿萨德发的发生12312123123123123阿萨德发的发生123123123123阿萨德发的发生1231231231233123123123123123123阿萨德发的发生123123123123阿萨德发的发1生1123112311231213".length());
System.out.println("123123123123阿萨德发的发生123123123123123阿萨德发的发生123123123123阿萨德发的发生123123123123123123123123阿萨德发的发生123123123123阿萨德发的发生123123123123123123123阿萨德发的发生12312123123123123阿萨德发的发生123123123123阿萨德发的发生1231231231233123123123123123123阿萨德发的发生123123123123阿萨德发的发1生11231123111111111111111111111111111111111111111112123123123123312113".length());
输出为
250
255
307
如果某个字段属性为varchar(249)那么第一个字符串存入库就会报错,如果varchar(254)的话第一个字符串存入就会报错。可以看出不管是数字还是字符串是按照单个字符来做基本单位的,只要一个字符就占一个长度,varchar(x)里的x就是你存入字符串的长度。
但是如果你用utf8存入"你好"实际会占用3*2个字节,因为mysql对utf8字符占用3字节,gbk占用2字节,当然数字还是占用1字节
写本文时参考了这篇文章: