对于int来说,int(10)表示 按照10长度来进行显示; char(10)表示 只能输入10个长度的字符; varchar(10)表示 最长能输入10个字符;
1):int类型,对吧,经常像保存个时间戳啊、id啊、数量啊、排序啊都会用到 提问:INT(11)是什么意思?最大保存十一位数么? 回答:不是楞个回事,听我给你摆,首先长度,也就是INT(M),M指示最大显示宽度,不是说限制你只能插入规定长度的数据,如果不信你试一下:INT(1),你可以插数字1,也可以插100,1000。那到底是撒子意思耶?MySQL手册上头说的清清楚楚:
M指示最大显示宽度,最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关
好,这下晓得的撒?我们指定的INT(10)、INT(11)是指定显示宽度,不是存储大小或者值的范围,再看一个例子: INT(3)的情况下 插入数字20,和数字2以及数字200,显示结果为: 020; 002; 200;
MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(3))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值
时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
说白了就是你设定最大宽度,插入的数据不够大,就从填充0,给你填满,够大就随便你,不得管你。这下就很通透了撒,哈哈~(但是强烈建议合理分配,过大过小都不好) Tip: 对于int类型的,如果不需要存取负值,最好加上UNSIGNED;对于经常出现在WHERE语句中的字段,考虑加索引,整形尤其适合加索引。
2):VARCHAR和CHAR 类型,先VARCHAR,经常用的比如用户名之类可变长度,那就说用户名吧 提问:你说这个用户名,VARCHAR(20)是撒子意思噢?(当然自己把握,没说必须20),这是规定长度了吧?用没得限制哦?汉字英文都是一样的迈? 回答:对头,就是可变长度,你阔以叫渣渣辉,也阔以叫乌木喂喂威 恩耶吞温威 乌温穆扁 欧萨斯,20个字符以内都阔以 说到是不是中英文都一样20个字符,在MySQL5.0之后:是的,一样。但在低版本中,英文肯定还是20,但中文要diao一点,一个占三个字节,所以存不了20个汉字,最多就6,7个??
然后说CHAR,也就是固定长度了,比如密码,常见的MD5加密,就是CHAR(32)对吧,多了少了都不行。 他们俩的区别就是一个可变长度一个固定长度,长度的区别CHAR是0-255,VARCHAR最大长度不固定(64K?反正一般文本够用),存在像字符集不同会受影响之类的因素,感兴趣可以自己去查查,我……晓得撒(懒)。大文本可以考虑TEXT,都是字符串类型的,最大到4G。 然后想说的是
- 如果知道文本的长度,最好直接用定长CHAR。
- CHAR>VARCHAR>TEXT。(具体以存储引擎而定)
- CHAR和VARCHAR可以有默认值,TEXT不能指定默认值。
- 尽可能节约空间使用更短的列,分配真正需要的空间,10和100都能存“你好”,懂得起撒