02 | 字段:这么多字段类型,该怎么定义?
整数类型
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了MySQL中不同数据类型的选择原则,包括整数类型、浮点数类型、定点数类型、文本类型和日期时间类型。在选择整数类型时,需要平衡存储空间和可靠性,作者强调了在项目中选择INT类型的原因。浮点数类型存在精度问题,而定点数类型DECIMAL则可以精确表示。对于文本类型,TEXT类型最为灵活方便,但不允许做主键。在日期时间类型中,DATETIME类型被推荐使用,因为它包括了完整的日期和时间信息,使用起来比较方便。此外,文章还介绍了一些SQL语句和给出了一些建议,如在定义数据类型时,确定是整数就用INT,小数就用DECIMAL,字符串就用TEXT,日期与时间就用DATETIME。最后,读者被提出了一个思考题,邀请他们分享对于会员信息字段数据类型的选择和原因。整体而言,本文为读者提供了关于MySQL数据类型选择的重要原则和建议,帮助他们在实际项目中做出合适的选择。
《MySQL 必知必会》,新⼈⾸单¥59
全部留言(36)
- 最新
- 精选
- cheriston置顶老师 按照你的代码插入数据 报错啊: [Err] 1366 - Incorrect string value: '\xE4\xB9\xA6' for column 'goodsname' at row 1 好像是字符集问题,为什么,怎么改。
作者回复: 可能是表的字符集不对,我用的是默认的:CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci,你可以试一下
2021-04-2142 - 朱晓峰置顶你好,我是朱晓峰,下面我就来公布一下上节课思考题的答案: 上节课,我们学习了数据存储的完整过程,包括创建数据库、数据表、确认字段和插入数据。下面是思考题的答案: 设计销售表如下: CREATE TABLE demo.sales ( goodsname text, salesprice decimal(10,2), quantity decimal(10,3), salesvalue decimal(10,2) );
作者回复: 供大家参考
2021-03-11413 - 右耳朵猫咪老师好,有一些公司用分而不是用元来表示金额,存储类型是int。这种方式和decimal哪个比较好呢?
作者回复: 还是一个精度问题。如果用分来表示金额,存储类型是INT,那么,如果场景中只有加减运算,就不会有问题。但是如果涉及到乘除运算,运算过程中出现分以下的金额,就会出现精度损失的问题。所以,还是要根据实际的业务场景,来决定。
2021-03-11913 - 陈启年朱老师,Text类型这段文字: “TEXT 类型也有 4 种,它们的区别就是最大长度不同。TINYTEXT:占用 255 字符。TEXT: 占用 65535 字符...” 此处的“字符”改为“字节”,是否更加严谨
作者回复: 这里用字符,侧重点在数据类型的使用上,表示这个数据类型的最多可以放多少个字符。这里假设是ASCII码,因此一个字符就是一个字节。字节侧重存储,意思是这个数据类型的数据最大需要占用多少存储空间。比如,tinytext类型最多可以存放255个字符,但是最多占用的存储空间是256个字节,因为有一个字节用来存储字符串长度。
2021-03-1211 - lesserror今天的MySQL查漏补缺来了。虽然MySQL的数据类型就那么几种,但是在实际的项目中还是有很多人在定义表字段的时候选择了不合适的数据类型,导致后期维护成本增加。 例如文中说的,在对精度有要求的字段中没有使用DECIMAL数据类型,反而选用了FLOAT、DOUBLE数据类型。我经手过的很多老项目也喜欢用INT类型来存时间戳,这种时间存取方式很麻烦而且也不直观。我个人也是持和老师相同的观点,采用DATETIME类型来存时间字段。因为虽然 DATETIME 类型占用的存储空间最多,但是它表达的时间最为完整,取值范围也最大。 另外,关于小数点精度丢失的那部分内容,老师解释的很准确。
作者回复: 技术服务于业务,根据业务需要决定类型定义
2021-03-119 - 海明朱老师,我看上面有个例子是这样写的,但是sum可以这样使用吗。sum函数在where这里。 SELECT * FROM demo.goodsmaster WHERE SUM(price)=1.1
作者回复: 这样写是不行的,SUM是聚合函数,一般要跟GROUP BY 关键字一起使用,比如,你有一个商品信息表demo.goodsmaster,其中有3个字段,分别是barcode,goodsname,price,现在商品名称可能重复,想查一下价格合计是1.1的商品,可以这样写: SELECT goodsname,SUM(price) FROM demo.goodsmaster GROUP BY goodsname HAVIING SUM(price)=1.1;
2021-03-1135 - 青鸟飞鱼老师,blob的运用场景是什么呢?
作者回复: blob是二进制字符串,比如可以把图片转换成二进制数据存入类型是blob的字段中。好处是可以像一个普通字段那样来处理图片,缺点是占用的存储资源大
2021-03-114 - SharpBB1.整数类型 TINYINT多用于布尔类型 枚举类型 占1个字节 一般来讲INT用的最多 占4个字节 除非该数字有可能超过21亿 一般不用BIGINT 不要为了节省一点存储空间 而忽视数据溢出带来的风险 可靠性第一! 2.浮点数类型和定点数类型 浮点数 float 单精度浮点数 double 双精度浮点数 mysql默认使用 缺陷:浮点数不精准 二进制无法精确表达 所以只能四舍五入 定点数 decimal可以精确表达 把十进制的整数与小数拆分 用十六进制存储 decimal(5,2) 前面的5是长度 后面的2是保留几位小数 涉及小数 可以无脑用decimal ps:涉及金额的 也可以以分为单位 用整型来存储 3.文本类型 一般都可无脑用text 65535字符 如果过长 则使用longtext text类型无需提前定义长度 且按实际长度存储 varchar(M)需要定义长度 但也是按实际长度存储的 注意 这里的M指的是字符 所以不管是英文还是中文 都可容纳M个 但text类型不能作为主键 这时候可以选择varchar或char 4.日期与时间类型 尽量使用datetime类型 用的最多 最完整 5.总结 整数用int 小数用decimal 字符串用text/varchar 时间用datetime 导图复制的 可能排版不太好
作者回复: 是的
2022-02-083 - NARUTO对于跨国的大型系统,时间字段可能会有时区的影响,不同的区域的用户使用时,都希望看到本地的时间,统计报表数据也是类似,这种场景下的时间业务字段,老师建议是用什么类型比较好?理由是什么呢?
作者回复: 建议使用DATETIME类型,理由是MySQL不会因为不同时区而返回不同的时间值,容易控制。
2021-09-013 - 奕为什么浮点数无符号取值范围的右边界也是个范围呢,
作者回复: 这是因为,浮点数的取值范围可以有2种方式来确定,一种方式是小数点放在在最前面,这样得出最小的无符号数,另外一种是把小数点放在最后,这样得出最大的无符号数
2021-03-1123