Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

MySQL接在字段类型后面的数字

  首先是字符串类型,当我们varchar(32)的时候这个32代表的是什么呢?这个字段最大长度是32字节吗?不对不对,这个32代表的是这个字段可以储存32个字符。而字符的判断依据是根据这个字段的字符集所定的。
drop table if exists tab; #删除表
create table tab(a varchar(10) char set utf8); #创建表
insert into tab(a) value('零壹贰叁肆伍陆柒捌玖'); #插入数据
select a from tab; #读取数组

  这里的10个汉字占的应该是30个字节,而varchar(10)却可以储存它。可见这个10表示的是字符数量,而不是字节数。 delete from tab; #清空记录
insert into tab(a) value('01234567890123456789'); #插入数据
select a from tab; #读取数组

  即使是单字节字符,也一样只能储存10个。
  下面看看int类型 drop table if exists tab; #删除表
create table tab(a int(1)); #创建表
insert into tab(a) value(1E10); #插入数据
select a from tab; #读取数组

  这个int字段的类型参数后面是1,可是从这个结果看来这个1表示的也不是这个类型储存的大小。我们插入的数据是1*1010,由于超出了int的限制,变成了int的最大值。log((2147483647+1)*2)/log(2)=32,也就是说int的数字参数无论是多少,它都是32位的,也就是4个字节。
  这个东西在decimal类型下尤其明显,因为decimal破天荒的需要两个数字参数。第一个表示位数(十进制),第二个表示小数保留的位数(十进制)。 drop table if exists tab; #删除表
create table tab(a decimal(3,2)); #创建表
insert into tab(a) value(3.14); #插入数据
insert into tab(a) value(3.1415926); #插入数据
select a from tab; #读取数组

  这个字段类型后面的数字参数仅仅作为字段类型的参数而已,和字段的存储空间是没有直接关系的。当然不排除你在数据库中直接诶使用varbinary之类的类型,这样它和字节长度的关系会比较密切,但是这也只是因为字段是二进制类型的。总之,这个东西的功能是由字段类型决定的,它只是作为一个参数而已。
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^