mysql基本数据类型有哪些

说起MySQL的基本数据类型,之前在项目中接触过很多次,很好玩。

首先我们来谈谈整数类型。
这些类型中最常用的是 TINYINT 和 INT。
记得有一次,我负责一个小项目,数据量不大。
天音可以满足很多需求。
这样不仅数量更短,而且数据库运行得更快。
当时我就想存储空间和性能可以这样发挥。

关于浮点数类型,我对FLOAT和DOUBLE也有很多应用经验。
我曾经帮助气象站输入数据。
对热成像的精度要求不高,FLOAT就足够了。
但如果涉及到科学计算,就应该用DOUBLE,精度高,不怕出错。

对于字符串类型,我之前使用过CHAR和VARCHAR。
我记得有一次我做了一个用户信息表。
更容易保持固定长度,所以使用CHAR。
但后来我把它改成了VARCHAR,因为使用VARCHAR更灵活,用户名可以有不同的长度。

BINARY 和 VARBINARY 是我在处理加密数据时最常使用的二进制数据类型。
一旦我们需要存储加密的用户密码,我们就使用更安全的二进制类型。

TEXT 和 BLOB 是大文本和二进制大对象类型,我在处理文本内容或图像存储时经常使用它们。
BLOB 对于存储大图片或音频文件特别强大。

日期和时间类型,DATE、TIME、DATETIME 和 TIMESTAMP,是我在处理与时间相关的函数时经常使用的四种类型。
例如,有一次我需要记录用户注册的时间,我使用了TIMESTAMP,因为范围比DATETIME小,并且它转换为UTC时区存储,以方便时区操作。

最后,关于布尔类型,MySQL没有原生的布尔类型,但我经常使用TINYINT(1 )来模拟它。
我使用了这种简单而有效的方法,因为我需要在用户注册某个任务后进行记录。

归根结底,这些数据类型都是根据实际需要来选择的是吗。
之前我从来没有想过为什么MySQL没有原生的boolean类型,但是后来我发现这样的设计很聪明,节省空间并且兼容性很好。
对此,我个人感觉MySQL的设计是人性化的。

mysql数据类型有哪些

数字类型分为整数和浮点数。
整数范围从 TINYINT 到 BIGINT,浮点范围从 FLOAT、DOUBLE 和 DECIMAL。

显示宽度可以设置为整数,但存储长度保持不变。
ZEROFILL 添加零填充并且隐式无符号。

浮点数 FLOAT(M,D),其中 M 为总位数,D 为小数点位数。
D≤M-2 FLOAT(2 ,1 )存储1 .1 ,FLOAT(1 ,2 )是一个错误。

DECIMAL 非常精确,用于财务目的。

日期类型包括DATETIME、DATE、TIMESTAMP、TIME、YEAR。

DATETIME 范围为 1 000-01 -01 到 9 9 9 9 -1 2 -3 1 DATE 是日期。
TIMESTAMP会自动转换,但表中只能有一列。

TIME 以分钟和秒为单位存储。
YEAR 支持 4 或 2 位数字。

字符串类型包括 CHAR、VARCHAR、BINANY、BLOB、TEXT、ENUM 和 SET。

CHAR 是固定长度,2 5 5 字节,包含空格。
VARCHAR是可变长度,6 5 5 3 5 字节,没有空格。

BINARY 存储二进制文件。
BLOB和TEXT分别存储大对象和长文本,无法设置默认值。

ENUM 只能选择预定义的值。
SET 可用于多种选择。
输入无效值,ENUM 取最高索引,SE​​T 被忽略。

ENUM('0','1 ','2 ') 插入 '3 ' 并存储 '2 '。
SET('a','b') 插入 'a,c' 并设置 'a'。

我还在看这个。
你自己看看吧。

如何在mysql中迁移跨版本数据类型

2 02 2 年,他遇到了问题。
某州某大型项目想要升级MySQL数据库版本,但数据量高达数百GB。
已存入的金额取决于具体合同。
我很困惑。
我必须确保迁移过程中数据系统兼容,以避免出现错误。
首先,要检查的数据约定类型。
某些工具可以将 TINYINT(1 ) 作为布尔值处理。
请确保目标版本支持它。
然后,DATETIMI的默认值在不同版本中的处理是不同的,以便我统一解释。
JSON 仅在 MySQL 5 .7 中支持。
目标版本低于5 .7 ,所以替换为LONGTEXT。
TIMESTAMP 的行为,5 .6 及更高版本的默认自动初始化和更新可能有所不同,我必须确认目标版本的行为。
ENUM/SET 长度限制在各个版本中略有调整。
我必须确保目标版本支持源版本长度。
字符差异,8 .0版本更严格,我统一使用utf8 mb4 和utf8 mb4 _unicode_ci。

使用Mysqldump导出逻辑数据、结构和数据,方便手动编译冲突类型。
导出时必须添加兼容模式,以便SQL脚本在目标版本中可执行。
首先导出表结构,检查并更改冲突的参数,然后导出数据。
MySQL8 .0中不支持INT(1 1 )显示宽度。
我必须将其替换为没有显示宽度的类型。
DATETIME 的默认值应更改为 CURRENT_TIMESTAMP 或有效值。
统一字符集,所有表和字段utf8 mb4
MySQL 8 .0发生了很大的变化。
不再支持显示宽度支持。
auto_increment 策略可以更改。
我对目标进行版本控制以确认行为。
导入后验证数据一致性、订单号验证、随机检查关键字段内容。
导入步骤、验证测试环境、可靠的工具、人工干预和文本翻译以避免对数据的依赖。
按照这些步骤,数据迁移很顺利,没有出现任何问题。