为什么数据库字段需要设置默认值
疑问的原因是没启⽤MySQL的严格模式(strict mode),很多快捷开发环境⾃带的MySQL(PHPnow WAMP Appserv等),都没有启⽤严格模式,甚⾄是在⼀些产品环境(production environment)都忽略了这点。
⾮严格模式下,MySQL会容忍许多开发上的疏忽,例如把⼀个长度100的字符串插⼊到varcaht中只会截断多余的部分⽽不报错。严格模式对数据的格式、长度、类型等进⾏校验,你贴出的建表语句中指定了DEFAULT,如果此时不指定DEFAULT,在你认为会启⽤默认值的时候会返回#1364错误。
开发阶段最好启⽤严格模式,这是对我们代码严谨性的测试,严进宽出也能保证转移到产品环境和后续的数据库迁移、重构顺利。
为什么数据库要设置默认值呢?因为我们希望在插⼊数据时,有意或⽆意间被忽略的字段能够交由MySQL按你事先预想的⽅式处理,例如⼀些默认正常状态码、⽤户插⼊数据时候尚未设置的⽂本字段,诸如此类。默认字符串是什么
我的习惯是任何数据表的任何列都是⾮空(NOT NULL),在此基础上将数字默认设为0,⽂本默认设为''(在PHPMyAdmin中留空)。这⾥涉及⼀个NULL和''的区别,对此我所知尚少,我使⽤''的原因是根据
语义NULL表⽰“此字段值为空”,⽽''表⽰“此字段暂未设置值”。另⼀个原因是在MyISAM引擎下,NULL对索引、索引统计、磁盘占⽤都会有额外的开销,⼀个允许为NULL的列,每个字段的长度都⽐NOT NULL的多1bit,我不确定最近⼏年是否有所改善,涉及到NULL的资料⼤概是在MySQL5.0时看过的。
⼤致区别如下:
// windows下配置⽂件mysq.ini中可修改
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"          //⾮严格
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES              //严格
//严格模式
不⽀持对not null字段插⼊null值
不⽀持对⾃增长字段插⼊” "值
不⽀持text字段有默认值

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