IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 被误解的tinyint(1) -> 正文阅读

[大数据]被误解的tinyint(1)

缘起

你真的了解char(n),int(n),tiny(n)代表什么意思嘛。你是不是觉得tiny(1)就只能存一位数字(0->9)? 我直至昨天为止也是这样认为的,但是事实却有点出乎意料。纸上得来终觉浅,绝知此事要躬行啊。

  • 以(utf-8)为例,采用mysql数据库来验证。
    测试环境

mysql 5.7
phpadmin

charvarchar

  1. 首先创建数据表
-- 创建数据库时,设置数据库的编码方式 
-- CHARACTER SET:指定数据库采用的字符集,utf8不能写成utf-8
-- COLLATE:指定数据库字符集的排序规则,utf8的默认排序规则为utf8_general_ci(通过show character set查看)

DROP DATABASE IF EXISTS `TEST`;

CREATE DATABASE `TEST` CHARACTER SET utf8 COLLATE utf8_general_ci;

USE `TEST`;

DROP TABLE IF EXISTS `CHAR_VARCHAR_TEST`;

CREATE TABLE `CHAR_VARCHAR_TEST` (
	`id` INT UNSIGNED AUTO_INCREMENT,
   `my_char` CHAR(3),
   `my_varchar` VARCHAR(3),
    PRIMARY KEY(`id`)
)CHARACTER SET utf8 COLLATE utf8_general_ci;;
  1. 往数据库中插入数据验证
INSERT INTO `char_varchar_test`(`my_char`, `my_varchar`) VALUES 
('123','123'),
('abc','abc'),
('我爱你','我爱你'),
('我爱你','我爱你啊'),
('我爱你a','我爱你');

可以看到,无论是char还是varchar,最多都只能存放设置的字符(数字、字母、中文),一旦超过就会报错。

intint(2)tinyint(2)

int中的数字是为了填充长度空缺的长度。

整型的长度并不会限制存储的数字范围. 比如, int 和 int(3) 的存储范围都是 -2147483648 ~ 2147483647, int unsigned 和 int(3) unsigned 的存储范围都是0 ~ 4294967295.

“整型"的长度实际上可以理解为"显示长度”, 如果该字段开启 "Zerofill/补零"就能很明显地知道它的作用.

实战一下

  • ZEROFILL
DROP DATABASE IF EXISTS `TEST`;

CREATE DATABASE `TEST` CHARACTER SET utf8 COLLATE utf8_general_ci;

USE `TEST`;

DROP TABLE IF EXISTS `INT_INTLENGTH`;

CREATE TABLE `INT_INTLENGTH` (
    id INT UNSIGNED AUTO_INCREMENT,
    i1 INT,
    i2 INT(2) ZEROFILL,
    i3 TINYINT ZEROFILL,
    i4 TINYINT(2) ZEROFILL,
    PRIMARY KEY (`id`)

    
) CHARACTER set utf8 COLLATE utf8_general_ci;

INSERT INTO `INT_INTLENGTH`(`i1`,`i2`,`i3`,`i4`) VALUES
(2,2,2,2),
(127,127,127,127),
(255,255,255,255),
(256,256,256,256),
(2147483647,2147483647,2147483647,2147483647),
(2147483648,2147483648,0,0),
(-2147483647,-2147483647,-1,-1),
(-2147483647,-1,-1,-1),
(0,0,0,0)
;

SELECT * FROM `INT_INTLENGTH`;



  • 没有ZEROFILL
DROP DATABASE IF EXISTS `TEST`;

CREATE DATABASE `TEST` CHARACTER SET utf8 COLLATE utf8_general_ci;

USE `TEST`;

DROP TABLE IF EXISTS `INT_INTLENGTH`;

CREATE TABLE `INT_INTLENGTH` (
    id INT UNSIGNED AUTO_INCREMENT,
    i1 INT,
    i2 INT(2) ,
    i3 TINYINT ,
    i4 TINYINT(2) ,
    PRIMARY KEY (`id`)

    
) CHARACTER set utf8 COLLATE utf8_general_ci;

INSERT INTO `INT_INTLENGTH`(`i1`,`i2`,`i3`,`i4`) VALUES
(2,2,2,2),
(127,127,127,127),
(255,255,255,255),
(256,256,256,256),
(2147483647,2147483647,2147483647,2147483647),
(2147483648,2147483648,0,0),
(-2147483647,-2147483647,-1,-1),
(-2147483647,-1,-1,-1),
(0,0,0,0),
(-2147483648,-2147483648,-1,-1),
(-2147483649,-2147483649,0,0)
;

SELECT * FROM `INT_INTLENGTH`;


结论:

可以看到整型的长度并不影响整型的数据范围,他一般会配合ZEROFILL使用。而ZEROFILL又包含了UNSIGNED,也就是说设置了ZEROFILL的列的取值范围从0开始,如tinyint设置zerofill之后的取值范围为(0-255),超出范围的数据会被截断再存库(如-1->0, 256->255)。

在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:34:18  更:2022-03-08 22:36:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:43:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码