2Python全栈之路系列之MysQl基本数据类型

简介:

Python全栈之路系列之MySQL基本数据类型


MySQL中定义数据字段的类型对你数据库的优化是非常重要的。

MySQL支持多种类型,大致可以分为三类:

  1. 数字类型

  2. 日期和时间类型

  3. 字符串类型


数字类型

类型 大小 用途
BIT - 二进制
TINYINT 1字节 小整数值
INT or INTEGER 4字节 大整数值
BIGINT 8字节 极大整数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 小数值
FLOAT 4字节 单精度浮点数值
DOUBLE 8字节 双精度浮点数值
BOOL, BOOLEAN - 布尔值
  • BIT[(M)]

二进制位(101001),m表示二进制位的长度(1-64),默认m=1

  • TINYINT[(M)] [UNSIGNED] [ZEROFILL]

小整数,数据类型用于保存一些范围的整数数值范围:

范围(有符号) 范围(无符号)
-128 to 127 0 to 255

特别的: MySQL中无布尔值,使用tinyint(1)构造。

  • INT[(M)] [UNSIGNED] [ZEROFILL]

整数,数据类型用于保存一些范围的整数数值范围:

范围(有符号) 范围(无符号)
-2147483648 to 2147483647 0 to 4294967295

整数类型中的m仅用于显示,对存储范围无限制。例如: int(5),当插入数据2时,select时数据显示为:00002

  • BIGINT[(M)] [UNSIGNED] [ZEROFILL]

大整数,数据类型用于保存一些范围的整数数值范围:

范围(有符号) 范围(无符号)
-9223372036854775808 to 9223372036854775807 0 to 18446744073709551615
  • DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。

特别的:对于精确数值计算时需要用此类型decaimal能够存储精确值的原因在于其内部按照字符串存储。

  • FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。

  • 无符号:
    -3.402823466E+38 to -1.175494351E-38,
    0
    1.175494351E-38 to 3.402823466E+38

  • 有符号:
    0
    1.175494351E-38 to 3.402823466E+38

数值越大,越不准确

  • DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。

  • 无符号:
    -1.7976931348623157E+308 to -2.2250738585072014E-308
    0
    2.2250738585072014E-308 to 1.7976931348623157E+308

  • 有符号:
    0
    2.2250738585072014E-308 to 1.7976931348623157E+308

数值越大,越不准确

  • BOOL, BOOLEAN

这些类型是TINYINT的同义词。零值被认为是假的。非零值被认为是正确的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql>  SELECT  IF(0,  'true' 'false' );
+ ------------------------+
| IF(0,  'true' 'false' ) |
+ ------------------------+
false                   |
+ ------------------------+
1 row  in  set  (0.00 sec)
mysql>  SELECT  IF(1,  'true' 'false' );
+ ------------------------+
| IF(1,  'true' 'false' ) |
+ ------------------------+
true                    |
+ ------------------------+
1 row  in  set  (0.00 sec)
mysql>  SELECT  IF(2,  'true' 'false' );
+ ------------------------+
| IF(2,  'true' 'false' ) |
+ ------------------------+
true                    |
+ ------------------------+
1 row  in  set  (0.00 sec)

然而,真假的值仅仅是为了分别为1和0,别名,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
mysql> SELECT IF( 0  =  FALSE,  'true' 'false' );
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| IF( 0  =  FALSE,  'true' 'false' ) |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| true                           |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
1  row  in  set  ( 0.01  sec)
mysql> SELECT IF( 1  =  TRUE,  'true' 'false' );
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| IF( 1  =  TRUE,  'true' 'false' ) |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| true                          |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
1  row  in  set  ( 0.00  sec)
mysql> SELECT IF( 2  =  TRUE,  'true' 'false' );
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| IF( 2  =  TRUE,  'true' 'false' ) |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| false                         |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
1  row  in  set  ( 0.00  sec)
mysql> SELECT IF( 2  =  FALSE,  'true' 'false' );
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| IF( 2  =  FALSE,  'true' 'false' ) |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| false                          |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
1  row  in  set  ( 0.00  sec)

时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个”零”值,当指定不合法的MySQL不能表示的值时使用”零”值。

类型 大小(字节) 格式 用途
DATE 3 YYYY-MM-DD 日期值
DATETIME 8 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 8 YYYYMMDD HHMMSS 混合日期和时间值,时间戳
TIME 3 HH:MM:SS 时间值或持续时间
YEAR 1 YYYY 年份值
类型 范围
DATE '1000-01-01' to '9999-12-31'
DATETIME '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999'
TIMESTAMP '1970-01-01 00:00:01.000000' UTC to '2038-01-19 03:14:07.999999'
TIME '-838:59:59.000000' to '838:59:59.000000'
YEAR 1901 to 2155

字符串类型

类型 大小(字节) 用途
CHAR(M) 0 to 255 固定长度的字符串,即使数据小于M长度,也会占用M长度
VARCHAR(M) 0 to 65535 一个可变长度的字符串,M表示在字符的最大列长度
TEXT[(M)] 0 to 65535 长文本列
MEDIUMTEXT 0 to 16777215 中等长度文本列
LONGTEXT 4294967295 or 4GB 极大文本列
ENUM('value1','value2',...)
枚举类型
SET('value1','value2',...)
集合类型
  • VARCHAR(M)注

虽然VARCHAR(M)使用起来较为灵活,但是从整个系统的性能角度来说,CHAR(M)数据类型的处理速度更快,有时甚至可以超出VARCHAR(M)处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡

  • ENUM('value1','value2',...)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE  TABLE  shirts (
     name  VARCHAR (40),
     size  ENUM( 'x-small' 'small' 'medium' 'large' 'x-large' )
);
 
INSERT  INTO  shirts ( name size VALUES  ( 'dress shirt' , 'large' ), ( 't-shirt' , 'medium' ),
   ( 'polo shirt' , 'small' );
   
mysql>  SELECT  name size  FROM  shirts  WHERE  size  'medium' ;
+ ---------+--------+
name     size    |
+ ---------+--------+
| t-shirt | medium |
+ ---------+--------+
1 row  in  set  (0.00 sec)
 
UPDATE  shirts  SET  size  'small'  WHERE  size  'large' ;
COMMIT ;
  • SET('value1','value2',...)

SET是一个字符串对象,它可以有0更多个值,每个值均必须选自一个允许值列表中,该列表在表创建时被指定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql>  CREATE  TABLE  myset (col  SET ( 'a' 'b' 'c' 'd' ));
Query OK, 0  rows  affected (0.01 sec)
 
mysql>  INSERT  INTO  myset (col)  VALUES  ( 'a,d' ), ( 'd,a' ), ( 'a,d,a' ), ( 'a,d,d' ), ( 'd,a,d' );
Query OK, 5  rows  affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0
 
mysql>  SELECT  col  FROM  myset;
+ ------+
| col  |
+ ------+
| a,d  |
| a,d  |
| a,d  |
| a,d  |
| a,d  |
+ ------+
rows  in  set  (0.00 sec)









本文转自 Edenwy  51CTO博客,原文链接:http://blog.51cto.com/edeny/1925859,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
Python
Python技术解析:了解数字类型及数据类型转换的方法。
在Python的世界里,数字并不只是简单的数学符号,他们更多的是一种生动有趣的语言,用来表达我们的思维和创意。希望你从这个小小的讲解中学到了有趣的内容,用Python的魔法揭示数字的奥秘。
294 26
|
数据采集 自然语言处理 Java
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
本文以反面教材形式,剖析了在使用 Playwright 爬取懂车帝车友圈问答数据时常见的配置错误(如未设置代理、Cookie 和 User-Agent),并提供了 Python、Java 和 .NET 三种语言的修复代码示例。通过错误示例 → 问题剖析 → 修复过程 → 总结教训的完整流程,帮助读者掌握如何正确配置爬虫代理及其它必要参数,避免 IP 封禁和反爬检测,实现高效数据采集与分析。
840 3
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
|
Python
Python中不同数据类型之间如何进行转换?
Python中不同数据类型之间如何进行转换?
792 160
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
665 1
|
12月前
|
人工智能 Python
python基本数据类型简介
本文简要介绍了Python的基本数据类型,包括整型、浮点型、字符串、列表、字典和布尔类型,帮助读者对Python数据类型有初步了解。
288 0
|
12月前
|
存储 安全 开发者
Python中的数据类型详解
Python是一种动态类型编程语言,具备丰富的数据类型,包括数值类型、序列类型、映射类型和集合类型等。这些类型为高效编程提供了强大支持。
323 0
|
Python
探索Python的各式数据类型
以上就是Python数据类型的一次简单而有趣的游览。和她继续接触,你会发现她还有更多有趣的面象,例如集合里的冰冻集合(Frozenset),序列里的字符串(String)和字节序列(Bytes)等等。希望这次游览能对你有所启发,让你更好地理解和使用Python。
172 21
|
存储 程序员 Python
Python 变量和简单数据类型
本文介绍了 Python 编程的基础知识,从创建第一个 Python 文件 `hello_world.py` 开始,讲解了 Python 文件的运行机制及解释器的作用。接着深入探讨了变量的定义、命名规则和使用方法,并通过示例说明如何修改变量值。同时,文章详细解析了字符串的操作,包括大小写转换、变量插入及空白字符处理等技巧。此外,还涵盖了数字运算(整数与浮点数)、常量定义以及注释的使用。最后引用了《Python 之禅》,强调代码设计的美学原则和哲学思想。适合初学者快速掌握 Python 基础语法和编程理念。
387 5
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
1440 15
|
Python
Python 中一些常见的数据类型
Python 中一些常见的数据类型
742 8

推荐镜像

更多