答案其实很简单,但是我的几个朋友还是搞不清 MySQL 的列类型定义中长度修饰符(指TINYINT(N)中的N)的作用,所以我在这里再解释一下。我相信,这个问题的出现的根本原因将字符串列类型定义中 N 的意义挪用到了数值列类型的定义中。
VARCHAR(N)
CHAR(N)
对于字符串列类型 VARCHAR(N) 和 CHAR(N)而言,N 是字段中可以存储的最大字符长度,也就是说是字段长度。根据设置,当你插入超出字段长度的数据时,你很可能会收到错误提示,即使没有收到错误提示,你插入的数据也会被自动截断以适应该字段的预定义长度。所以,VARCHAR(20) 和 VARCHAR(40) 是不同的,其真实反映了该字段可以存储的数据长度。
现在,让我们来看看数值列类型。对于数值列类型而言,其长度修饰符表示显示宽度,与该字段物理存储没有任何关系。也就是说,TINYINT(1) 和 TINYINT(4) 能够存储的数值范围都是-128..127 (or for unsigned values 0..255),他们是相同的数据类型,当然他们还是有一点差异,以下会有说明。
那么既然 display width 无法限制其所修饰字段的列范围,为什么还要使用它呢?在MySQL论坛中,有一个帖子建议通过使用display width 来提醒我们自己该字段应该有多大。就我个人而言,这个建议确实不错,当我们复查自己的数据库定义的时候,可以很容易看到该字段有多大。
display width的一个重要作用是配合ZEROFILL来使用。
所以,最后让我们记住,对于数值数据而言,TYPE(N) 中的 N 跟数值范围没有任何关系,它表示显示宽度。
分类目录
- arch/management (17)
- computer (38)
- java/j2ee (304)
- lnmpa (237)
- mac/iphone/ipad/android (11)
- mysql/oracle/postgresql (126)
- os/software (74)
- other (518)
- python (6)
- redis/memcached/mongo (31)
- sitebuild (143)
随便看看
标签云
程序员 创业 人生箴言 eclipse 快捷键 术语 索引 unix命令 vim wordpress java学习笔记 环境变量 oracle内置函数 index 人生 数据类型 nohup tuxedo mysql学习笔记 MS-DOS命令 servlet spring 职场进阶 职业进阶 服务器选购 服务器选型 apache JPA MongoDB 注解 tomcat 子女教育 jquery maven JVM aix命令 网络营销 java异常 seo 人生规划 关键字 css 网络推广 struts 系统优化 成长 frame iframe bluehost jdbc select 我的信仰 oracle函数 cookie HashMap 站长工具 乱码 ArrayList secureCRT jsp session tail find halt 事务 oracle单记录函数 算法 URL window table javascript操作表单元素 String 字符串处理 健康 http 域名 情感 more google A记录 域名解析 netstat 弹出对话框 弹出窗口 框架集 框架 excel 字符串 javascript函数 showModalDialog nginx number 数组 sql frameset 开源程序 java数组 软件 oracle服务友情链接
收藏链接