选自“潇洒哥和黑大帅”公众号,一个程序员和他的爱情故事。如果喜欢,请在下方扫码关注。
首先说一下优点,可以控制插入字符的选项,规范数据。那说说有哪些缺点,如下:
总结:如果你的内容是固定的,后期不会增加,那可以选择 enum ,例如:男、女。那如果是状态类的,后期会根据业务增加新状态,那就使用 tinyint(1) 。
这是一个把约束最终交给数据库还是程序的问题,我在这说说我的几点看法。
说了这几点后, 自然也明白了我不选择使用外键的原因。
当保存字符串数据是空的时候,往往有两种选择,空字符串或NULL。那如何选择呢,我这里先给出建议,选择空字符串(默认空字符串),原因如下:
3. 自动填充时间
mysql5.6 之前 TIMESTAMP 支持如下语法,5.6之后 DATETIME 才支持。
-- 创建时自动填充当前时间
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- 创建和修改时自动填充当前时间
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP,
4. 总结
如果不考虑时间的截至日期,我考虑选择 TIMESTAMP,因为可以兼容不同版本的时间填充和时区控制。
在创建数据库时,需要设定字符集和排序规则。
utf8_general_ci
不区分大小写,这个你在注册用户名和邮箱的时候就要使用utf8_general_cs
区分大小写,如果用户名和邮箱用这个 就会照成不良后果utf8_bin
字符串每个字符串用二进制数据编译存储。区分大小写,而且可以存二进制的内容注意:一般选择 utf8_general_ci
,它在where 语句进行比对查询时,速度很快。
在设计表时,如果出现状态之类的字段。例如:0 代表男,1 代表女。使用 tinyint(1) 代替。原因如下:
B'1111100'
或 b'1111100'
,读取数据时使用bin(column_name)
。查询速度: char > varchar > text
以上是我在实际开发中所总结的一些经验,如果你还有其它说的,请在评论区补充。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。