mysql中int10跟int11的区别_mysql中,int(1)和int(10)和
in。。。
⾸先,要知道int占⽤4个字节(4*8=32位)。⽽int的最⼤值为2^32=4294967295,如果有符号,则为2^31,由此可见,与mysql的int 类型数字最⼤最⼩值⼀致。
mysql中int类型默认长度11,其中正负值占⽤了⼀个单位的长度,这⾥的长度仅代表数字的长度,即数字10长度为2,数字100长度为3,以此类推。其实这⾥长度只是展⽰的长度,与存储占⽤的多少⽆关,即int(1)和int(10)和int(11)的存储空间都是占⽤4字节,这⾥是完全⼀样的。
a)默认有正负值,只是如果勾选UNSIGNED⽆符号数,则int(3)或int(10)或int(11)的值范围变成0~4294967295
b)除⾮都加上ZEROFILL,会在数字前⾯补0
那么,varchar(4)呢(据说最⼤varchar(21845)),⼀般默认是utf-8格式:
a)假如存4个汉字,则占⽤4*3=12字节。
b)存4个字母,则占⽤4*1=4字节。
mysql下载32位c)varchar会⽤⼀个或两个字节保存长度。即varchar(20)和varchar(255)对应的索引长度分别为20*3(utf-8)(+2+1),255*3(utf-8)
(+2+1),其中"+2"⽤来存储长度信息,“+1”⽤来标记是否为空,加载索引信息时⽤varchar(255)类型会占⽤更多的内存; (备注:当字段定义为⾮空的时候,是否为空的标记将不占⽤字节)
d)硬盘上,varchar(100)和varchar(200)存储⼀个相同的字符串,实际是⼀样的,根据字符长度分配存储空间。但mysql在内存保存时,是使⽤固定⼤⼩的内存块保存值,就是使⽤字符类型中定义的长度,varchar(200)即200个字符空间。显然,这对于排序或者临时表(这些内容都需要通过内存来实现)作业会产⽣⽐较⼤的不利影响。详见
那么,char(4)呢?
a)从碎⽚⾓度进⾏考虑,使⽤CHAR字符型时,由于存储空间都是⼀次性分配的。为此某个字段的内容,其都是存储在⼀起的。单从这个⾓度来讲,其不存在碎⽚的困扰。⽽可变长度的字符数据类型,其存储的长度是可变的。当其更改前后数据长度不⼀致时,就不可避免的会出现碎⽚的问题。故使⽤可变长度的字符型数据时,数据库管理员要时不时的对碎⽚进⾏整理。如执⾏数据库导出导⼊作业,来消除碎⽚。
b)考虑其长度的是否相近,如果某个字段其长度虽然⽐较长,但是其长度总是近似的,如⼀般在90个到100个字符之间,甚⾄是相同的长度。此时⽐较适合采⽤CHAR字符类型。⽐较典型的应⽤就是MD5哈希值。当利⽤MD5哈希值来存储⽤户密码时,就⾮常使⽤采⽤CHAR 字符类型。因为其长度是相同的。另外,像⽤来存储⽤户的⾝份证号码等等,⼀般也建议使⽤CHAR类型的数据。
另外请⼤家考虑⼀个问题,CHAR(1)与VARCHAR(1)两这个定义,会有什么区别呢?虽然这两个都只能够⽤来保存单个的字符,但是VARCHAR要⽐CHAR多占⽤⼀个存储位置。这主要是因为使⽤VARCHAR数据类型时,会多⽤1个字节⽤来存储长度信息。这个管理上的开销char字符类型是没有的。
varchar和char,⼆者在磁盘上存储占的空间是⼀样的。区别有⼆。第⼀、⼀个变长⼀个固定长度。第⼆、在内存中的操作⽅式,varchar 也是按照最长的⽅式在内存中进⾏操作的。⽐如说要进⾏排序的时候,varcahr(100)是按照100这个长度来进⾏的。
ASCII码:⼀个英⽂字母(不分⼤⼩写)占⼀个字节的空间,⼀个中⽂汉字占两个字节的空间。⼀个⼆进制数字序列,在计算机中作为⼀个数字单元,⼀般为8位⼆进制数,换算为⼗进制。最⼩值-128,最⼤值127。如⼀个ASCII码就是⼀个字节。
UTF-8编码:⼀个英⽂字符等于⼀个字节,⼀个中⽂(含繁体)等于三个字节。中⽂标点占三个字节,英
⽂标点占⼀个字节。
Unicode编码:⼀个英⽂等于两个字节,⼀个中⽂(含繁体)等于两个字节。中⽂标点占两个字节,英⽂标点占两个字节。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。