mysql 数据类型

数据类型

整数

类型意义
tinyint(m)1个字节 范围(-128~127)
smallint(m)2个字节 范围(-32768~32767)
mediumint(m)3个字节 范围(-8388608~8388607)
int(m)4个字节 范围(-2147483648~2147483647)
bigint(m)8个字节 范围(±9.22*10的18次方)
  • 如果加 unsigned,则最大值翻倍。
  • int(m) 的m是表示 SELECT 查询结果集中的显示宽度,不影响实际的取值范围。且只有当指定了 zerofill 属性时才起作用。

浮点数

类型意义
float(m,d)单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d)双精度浮点型 16位精度(8字节) m总个数,d小数位

设一个字段定义为 float(6,3)

  • 如果插入一个数 123.45678,实际数据库里存的是 123.457,但总个数还以实际为准,即 6 位。
  • 整数部分最大是 3 位,如果插入数 12.123456,存储的是 12.1234
  • 如果插入12.12,存储的是12.1200
浮点数和定点数区别

转自:https://www.cnblogs.com/-xlp/p/8617760.html

mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));
mysql> insert into test values(131072.32,131072.32);
Query OK, 1 row affected (0.07 sec)

mysql> select * from test;
+-----------+-----------+
| c1        | c2        |
+-----------+-----------+
| 131072.31 | 131072.32 |
+-----------+-----------+
  • 从上面的例子中我们看到c1列的值由131072.32变成了131072.31,这就是浮点数的不精确性造成的。
  • 在mysql中float、double(或real)是浮点数,decimal(或numberic)是定点数。
  • 浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围;它的缺点是会引起精度问题。
  • 浮点数存在误差问题;
  • 对货币等对精度敏感的数据,应该用定点数表示或存储;
  • 编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;
  • 要注意浮点数中一些特殊值的处理。

定点数

浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

类型意义
decimal(m,d)m<65 是总个数,d<30且 d<m 是小数位

字符串

类型意义
char(n)固定长度,最多255个字符
varchar(n)可变长度,最多65535个字符
tinytext可变长度,最多255个字符
text可变长度,最多65535个字符
mediumtext可变长度,最多2的24次方-1个字符
longtext可变长度,最多2的32次方-1个字符
varchar 与 char 区别:
  • char 长度固定,varchar 长度可变
    char 如果插入的长度小于定义长度时,用空格填充
    varchar 小于定义长度时,按实际长度存储
    因长度固定,char 的存取速度还是要比 varchar 要快得多,方便程序的存储与查找,但会占据多余的空间。
  • 存储的容量不同
    char 最多 255,和编码无关。
    varchar 最多能存放 65532 个字符。
varchar和text
  • text 不能有默认值
  • varchar 可直接创建索引(因为 varchar(n) 指定了最大长度),text创建索引要指定前多少个字符。varchar 查询速度快于 text
blob 与 text
  • blob 以二进制方式存储,不分大小写。text 以文本存储
  • blob 存储的数据只能整体读出
  • text 可以指定字符集,blob 不用指定字符集

日期

类型意义
date‘2008-12-2’
time‘12:25:36’
datetime‘2008-12-2 22:06:44’
timestamp自动存储记录修改时间

若定义一个字段为 timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

其他

  • BINARY
  • VARBINARY
  • ENUM
  • SET
  • Geometry
  • Point
  • MultiPoint
  • LineString
  • MultiLineString
  • Polygon
  • GeometryCollection
  • JSON

mysql 类型的属性

mysql建表时,每个字段的属性有三个选项: binary, unsigned, unsigned zerofill,作用如下:

binary
  • 针对 CHAR / VARCHAR / TEXT
  • binary属性表示以二进制方式存储
    在mysql中,存储方式有“文本”和“二进制”两种,主要区别在于前者不区分大小写而后者区分
  • 官网文档:https://dev.mysql.com/doc/refman/8.0/en/blob.html
    If you use the BINARY attribute with a TEXT data type, the column is assigned the binary (_bin) collation of the column character set.
create table aaaaa(id varchar(2) binary);
create table bbbbb(id text binary);
unsigned

针对数据类型
如:TINYINT[(M)] [UNSIGNED] [ZEROFILL]
有符号的范围是 -128 到 127,无符号的范围是 0 到 255。

zerofill

zerofill 类似一个显示属性

CREATE TABLE `dddd` (`id` int(11) DEFAULT NULL)

可以看到 int(11) ,这代表什么意思呢?整型不就是4个字节,这个10代表什么意思,如果没有 zerofill 这属性,括号类的数字没有意义。
查询结果:

+------+
| id   |
+------+
|    1 |
+------+

执行:

alter table dddd change column id id int(11) unsigned zerofill;

再查询:

+-------------+
| id          |
+-------------+
| 00000000001 |
+-------------+

大小写敏感

对于一个 varchar 字段,mysql 默认是大小写不敏感的。如果我们的字段本身是敏感的,如下解决。

1. 设置系统参数(全局)
show variables like 'lower%'

my.cnf 中的 [mysqld] 后面添加 lower_case_table_names=1,重启MYSQL服务

2. 只针对单个表

上面是全局设置,如果只针对单个表

alter table user_priv change user_name user_name char(32) binary NOT NULL;

参考:
int(11) 与 int(10) 的区别
https://blog.csdn.net/qq_43843725/article/details/93885092

char 和 varchar 的区别
https://blog.csdn.net/Gane_Cheng/article/details/52316408

mysql 各种类型
https://www.cnblogs.com/-xlp/p/8617760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值