【MySQL】——数据类型及字符集

小明 2025-05-04 01:29:30 10

🎃个人专���:

🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客

🐳Java基础:Java基础_IT闫的博客-CSDN博客

🐋c语言:c语言_IT闫的博客-CSDN博客

🐟MySQL:数据结构_IT闫的博客-CSDN博客

🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客

💎C++:C++_IT闫的博客-CSDN博客

🥽C51单片机:C51单片机(STC89C516)_IT闫的博客-CSDN博客

💻基于HTML5的网页设计及应用:基于HTML5的网页设计及应用_IT闫的博客-CSDN博客​​​​​​

🥏python:python_IT闫的博客-CSDN博客

🐠离散数学:离散数学_IT闫的博客-CSDN博客

欢迎收看,希望对大家有用!

目录

🎯概述:

🎯数值型

🎃整数型

🎃小数类型

🎐 浮点数

🎯日期时间型

🎯字符串类型

🎯mysql字符集问题


🎯概述:

MySQL数据类型(列类型)可归纳为数值型、时间日期型和字符型。

数值型:

整形:tinyint/smallint/mediumint/int/bigint

小数型:Float(D,M),decimal(D,M)

字符串型:

Char(M)

Varchar(M)

Text 文本类型

日期/ 时间型:

Date 日期

Time 时间

Datetime 日期时间型

TIMESTAMP    时间戳类型

Year 年类型

🎯数值型

🎃整数型

tinyint(1), smallint(2), mediumint(3),int(4), bigint(8)。括号中表示该类型所占空间的长度(字节数)

类型

大小

范围(有符号)

范围(无符号)

用途

TINYINT

1 字节

(-128,127)

(0,255)

小整数值

SMALLINT

2 字节

(-32 768,32 767)

(0,65 535)

大整数值

MEDIUMINT

3 字节

(-8388 608,8388 607)

(0,16777215)

大整数值

INT或INTEGER

4 字节

(-2147483648,2147483647)

(0,4294967295)

大整数值

BIGINT

8字节

(-9,223,372,036,854,775,808,9223372036854775807)

(0,18446744073709551615)

极大整数值

整形系统的可选参数: XXint(M) unsigned zerofill

例: age tinyint(4) unsigned 或者 stunum smallint(6) zerofill

Unsigned: 代表此列为无符号类型,会影响到列的存储范围(范围从0 开始)

(不加unsigned, 则代表该列默认是有符号类型,范围从负数开始)

列可以声明默认值,而且推荐声明默认值

Not null default 0;

Zerofill :代表0 填充,即:如果该数字不足参数M位,则自动补0,补够M位。

1. 如果没有zerofill 属性,单独的参数M,没有任何意义

2. 如果设置某列为zerofill, 则该列已经默认为unsigned, 无符号类型,M代表该列的显示宽度。

🎃小数类型

🎐 浮点数

小数型: float(M,D),decimal(M,D)

float(M,D): 浮点小数,代表可存储一共M位(不含小数点),其中,小数点后D位

decimal(M,D) :定点小树, M,D的意义同上.

区别: decimal 比float 精度更高,适合存储货币等要求精确的数字.

见下例:

🎯日期时间型

mysql 时间类型有,date,time,datetime,timestamp,year五种。

date类型: 支持的范围为’1000-01-01’到’9999-12-31’

time类型: 支持的范围是’-838:59:59’到’838:59:59’

datetime类型:支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’

timestamp类型:时间戳,就是表示“当前时刻”, 用int 来存储,是1970-01-01 00:00:00 到当前的秒数,类似函数now()获得的值,用于INSERT或UPDATE操作时自动获得当前时间。

一般存注册时间,商品发布时间等,并不是用datetime 存储,而是用时间戳。因此datetime 虽然直观,但计算不便。

year类型: 四位字符串,范围为’1901’到’2155’;四位数字,范围为1901到2155;两位字符串,范围为’00’到’99’;两位整数,范围为1到99

在mysql中除了timestamp 类型允许有默认值外,其他时间类型都不能有默认值,不然会报错。

mysql常用时间日期函数

获取当前日期和时间: now();

获取当前日期: curdate();

获取当前时间:curtime();

将具体时间转换为时间戳:unix_timestamp();

将时间戳转换为时间:from_unixtime();

🎯字符串类型

mysql提供的有CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

Char 定长类型

Char(M),M 代表宽度,( 即:可容纳的字符数),0connection——>server/database——>results——>connection——>client,任何一个环节的字符集不兼容都会出现乱码。

1、用户通过mysql.exe来操作mysqld.exe

2、真正的SQL执行是mysqld.exe来执行

3、mysql.exe将数据传入mysqld.exe的时候,没有告知其对应的符号规则(字符集),而mysqld也没有能力自己判断,就会使用自己默认的(字符集);

解决方案:

mysql.exe如果告知mysqld.exe对应的字符集类型为GBK

深层原理:

客户端、服务器、连接层

客户端传入数据给服务器:client

服务器返回数据给客户端:server

客户端与服务器端之间的连接:connection

The End
微信