Mysql数据类型

MySQL的数据类型

一、整数类型


整数类型


字节


取值范围


取值范围


tinyint


1


有符号 -128

无符号 0


有符号 127

无符号 255


Smallint


2


有符号 -32768

无符号 0


有符号 32767

无符号65535


mediumint


3


有符号 -8388608

无符号 0


有符号 8388607

无符号1677215


int,integer


4


有符号 -2147483648

无符号 0


有符号 2147483647

无符号4294967295


bigint


8


有符号 -263

无符号 0


有符号 263-1

无符号264-1

tinyint、medinumint、int、bigint这个集中类型如果要是操作超出范围的话会显示"Out of range",对于数值的类型我们一般指定数据宽度比如:int(5),如果不指定数值的宽度则默认为int(11)。一般数值在小于指定的宽度的时候,就配合zerofill使用,就是字符空间用0填满。

创建一个数据库,里面包括id1和id2,指定数值宽度为int和int(5),SQL语句如下

mysql> create database lianxi;
Query OK, 1 row affected (0.32 sec)

mysql> use lianxi 

Database changed
mysql> create table t1(id1 int,id2 int(5));
Query OK, 0 rows affected (6.14 sec)

mysql> desc t1;

+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id1 | int(11) | YES | | NULL | |
| id2 | int(5) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.93 sec)
mysql> insert into t1(id1,id2) values(111111,111111);            插入111111数据

Query OK, 1 row affected (0.27 sec)

mysql> select * from t1;------------------------------>疑问1?
+--------+--------+
| id1    | id2    |
+--------+--------+
| 111111 | 111111 |
+--------+--------+
1 row in set (0.41 sec)

mysql> insert into t1(id1,id2) values(1111,1111);
Query OK, 1 row affected (0.04 sec)

mysql> select * from t1;
+--------+--------+
| id1    | id2    |
+--------+--------+
| 111111 | 111111 |
|   1111 |   1111 |
+--------+--------+
2 rows in set (0.00 sec)

mysql> alter table t1 modify id1 int zerofill;------------------->zerofill让效果更加的明显。
Query OK, 2 rows affected (3.36 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+------------+--------+
| id1        | id2    |
+------------+--------+
| 0000111111 | 111111 |
| 0000001111 |   1111 |
+------------+--------+
2 rows in set (0.00 sec)

mysql> alter table t1 modify id2 int(5) zerofill;
Query OK, 2 rows affected (0.41 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+------------+--------+
| id1        | id2    |
+------------+--------+
| 0000111111 | 111111 |
| 0000001111 |  01111 |
+------------+--------+
2 rows in set (0.00 sec)

mysql> 

有很多人疑问int(5)后面的5是不是表示占用5个字节呢?那么疑问1又怎么解释呢?为什么会显示6个1呢?为什么我设置了5还会显示6个呢?

其实在int(m)中的m和你占的字节没有关系,我前面的表格中也写了int类型是4个字节,不管m是多少都是4个字节,那m是什么呢,在最后的一个select语句中我给id2添加了zerofill,是不是一目了然呢,不错,m就表示最少显示m个,为什么我输入4个1的时候没有填0呢?那是因为没有添加zerofill,但是系统在存储的时候是要添加0进去的。

对于小数MySQL有两种方式:浮点数和定点数

浮点数:double(双精度)

float(单精度)

定点数:decimal:定点数在mysql内部是用字符串形式存储的。所以要比浮点数更加精确,适合表示货币等精确数据。(摘自《深入浅出MySQL》)

mysql> create table t2(id1 float(5,2) default NULL,id2 double(5,2) NULL,id3 decimal(5,2) default NULL);

Query OK, 0 rows affected (1.04 sec)

mysql> desc t2;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id1   | float(5,2)   | YES  |     | NULL    |       |
| id2   | double(5,2)  | YES  |     | NULL    |       |
| id3   | decimal(5,2) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.97 sec)

mysql> 

我们使用的float和double的精度用法并不是标准的用法,所以精度要求很高的重要数据不建议使用

无论是定点类型还是浮点类型,如果用户指定的精度超出范围,则会进行四舍五入处理。

BIT(位)类型,这个是用来存放二进制的数据,BIT(m)这里的m范围是1~64,读取的时候我们要使用bin()或者hex(),用select是查不出数据的。

二、日期时间类型


日期和时间类型


字节


最小值


最大值


Date年月日


4


1000-01-01


9999-12-31


Datetime年月日时分秒


8


1000-01-01 00:00:00


9999-12-31 23:59:59


Timestamp时区对应时间


4


19700101080001


20380119111407


Time单独表示时间


3


-838:59:59


838:59:59


Year单独表示年


1


1901


2155

DATE、TIME、DATETIME是经常使用的3中日期类型

mysql> create table t3(d date,t time,dt datetime);

Query OK, 0 rows affected (0.72 sec)

mysql> desc t3;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| d     | date     | YES  |     | NULL    |       |
| t     | time     | YES  |     | NULL    |       |
| dt    | datetime | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.19 sec)

mysql> insert into t3 values(now(),now(),now());
Query OK, 1 row affected, 1 warning (1.04 sec)

mysql> select * from t3;
+------------+----------+---------------------+
| d          | t        | dt                  |
+------------+----------+---------------------+
| 2017-03-03 | 06:51:28 | 2017-03-03 06:51:28 |
+------------+----------+---------------------+
1 row in set (0.00 sec)

mysql> 

还有就是TIMESTAMP,他的取值范围19700101080001到2038的某一天,范围相对比较小,而且这个和时区有关系。

三、字符串类型


字符串类型


字节


描述


char(m)


M


M为0-255之间的整数


varchar(m)


M为0-65535之间的整数,值的长度为+1个字节


tinytext


允许长度0-255字节,值为长度+2个字节


text


允许长度0-65535字节,值为长度+2个字节


mediumtext


允许长度0~167772150字节值为长度+3个字节


longtext


允许长度0~4294967295字节值为长度+4个字节

这个我们最常用到,我们谈谈char和varchar的区别:主要区别就是存储的方式不同char的长度固定为创建表时的声明的长度,而varchar是可变长字符串,在检索的时候,char删除了尾部的空格而varchar则保留这些空格。(摘自《深入浅出MySQL》)

mysql> create table t4(v varchar(4),c char(4));
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    24
Current database: lianxi

Query OK, 0 rows affected (0.88 sec)

mysql> insert into t4 values(‘ab ‘,‘ab ‘);------------------------->这里要插入空格
Query OK, 1 row affected (0.30 sec)

mysql> select length(v),length(c) from t4;
+-----------+-----------+
| length(v) | length(c) |
+-----------+-----------+
|         3 |         2 |--------------------------------->char类型少了个字节
+-----------+-----------+
1 row in set (0.09 sec)

mysql> select concat(v,‘+‘),concat(c,‘+‘) from t4;------------>添加+,让效果更佳明显
+---------------+---------------+
| concat(v,‘+‘) | concat(c,‘+‘) |
+---------------+---------------+
| ab +          | ab+           |
+---------------+---------------+
1 row in set (0.06 sec)

mysql> 

如果某一项中设置的是varchar(50)那么对英文当然是50那么对中文呢utf-8的中文占3个字节那么,这个varchar(50)是不是只能存16个汉字了? 不是这样的,mysql低版本之前是这样的,但是5.0以后就不是了mysql varchar(50)  不管中文还是英文都是存50个的,但是一个表中所有varchar字段的总长度跟编码有关,如果是utf-8,那么大概65535/3,如果是gbk,那么大概65535/2编码长度限制字符类型若为gbk,每个字符最多占2个字节字符类型若为utf8,每个字符最多占3个字节。

ENUM和SET类型:

enum一般是多选一,我们可以做性别选择,set是多个成员可以选择多个。

mysql> create table t5(sex enum(‘man‘,‘woman‘));

Query OK, 0 rows affected (0.11 sec)

mysql> insert into t5 values(‘man‘);
Query OK, 1 row affected (0.07 sec)

mysql> insert into t5 values(‘men‘);
Query OK, 1 row affected, 1 warning (0.02 sec)

mysql> select * from t5;
+------+
| sex  |
+------+
| man  |
|      |
+------+
2 rows in set (0.00 sec)

mysql> show warnings;
Empty set (0.00 sec)

mysql> insert into t5 values(‘men‘);
Query OK, 1 row affected, 1 warning (0.02 sec)

mysql> show warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column ‘sex‘ at row 1 |-------------------->看警告
+---------+------+------------------------------------------+
1 row in set (0.00 sec)

mysql> insert into t5 values(‘man,woman‘);
uery OK, 1 row affected, 1 warning (0.04 sec)

mysql> show warnings;

+---------+------+------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column ‘sex‘ at row 1 |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)

mysql> create table t6(raw set(‘a‘,‘b‘,‘c‘));

Query OK, 0 rows affected (0.08 sec)


mysql> insert into t6 values(‘a,b‘);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t6;
+------+
| raw  |
+------+
| a,b  |
+------+
1 row in set (0.00 sec)
时间: 2024-10-13 12:34:06

Mysql数据类型的相关文章

(转)mysql数据类型

1.整型 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,则最大值翻倍,如tinyint unsigned的取值范围为

MySQL 数据类型(转)

MySQL 数据类型 在 MySQL 中,有三种主要的类型:文本.数字和日期/时间类型. Text 类型: 数据类型 描述 备注 CHAR(size) 保存固定长度的字符串(可包含字母.数字以及特殊字符).在括号中指定字符串的长度.最多 255 个字符.   VARCHAR(size) 保存可变长度的字符串(可包含字母.数字以及特殊字符).在括号中指定字符串的最大长度.最多 255 个字符. 注释:如果值的长度大于 255,则被转换为 TEXT 类型.   TINYTEXT 存放最大长度为 25

跟王老师学MySQL:MySQL数据类型之小数类型

跟王老师学MySQL:MySQL数据类型之小数类型 主讲教师:王少华   QQ群号:483773664 学习内容 小数类型有哪些以及它们的取值范围 定义语法中的M和D的含义 定点型和浮点型的区别 一.简介 MySQL中使用浮点数类型和定点数类型来表示小数. 浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型). 定点数类型就是DECIMAL型. 二.字节数.取值范围 三.定义语法 1 类据类型 (M,D) M:精度,数据的总长度 D:标度,小数点后的长度 注: 小数点不占长

跟王老师学MySQL:MySQL数据类型之字符类型

跟王老师学MySQL:MySQL数据类型之字符类型 主讲教师:王少华   QQ群号:483773664 学习内容: 字符串类型的种类及其特点 char和varchar的异同 字符串类型是在数据库中存储字符串的数据类型. 字符串类型包括 CHAR. VARCHAR BLOB TEXT 一.char和varchar (一)定义语法 1 字符串类型 (M) 注: 字符串类型:char或varchar M:指定了该字符串最大长度 (二)二者不同之处 char类型长度是固定的,即在创建表时就指定了,其长度

跟王老师学MySQL:MySQL数据类型之日期与时间类型

跟王老师学MySQL:MySQL数据类型之日期与时间类型 主讲教师:王少华   QQ群号:483773664 学习内容 YEAR类型的特点及使用 TIME类型的特点及使用 DATE类型的特点及使用 DATETIME类型的特点及使用 TIMESTAMP类型的特点及使用 MySQL表示日期和时间的数据类型有以下几种: 1.YEAR类型 2.TIME类型 3.DATE类型 4.DATETIME类型 5.TIMESTAMP类型 一.Year类型 (一)简介 year使用一个字符串来表示年份 MySQL中

跟王老师学MySQL:MySQL数据类型常见问题及解答

跟王老师学MySQL:MySQL数据类型常见问题及解答 主讲教师:王少华   QQ群号:483773664 学习内容 整数类型和浮点类型的异同 浮点数类型和定点数类型的异同 char和varchar类型的异同 时间和日期类型的异同 text和blob的异同 存储路径字符串的注意事项 mysql如何存储boolean类型 null的处理 在MySQL中创建表时,需要考虑为字段选择哪种数据类型是最合适的.选择了合适的数据类型,会提高数据库的效率. 一.整数类型和浮点类型 整数类型和浮点类型最大区别是

跟王老师学MySQL:MySQL数据类型之整数类型

跟王老师学MySQL:MySQL数据类型之整数类型 主讲教师:王少华   QQ群号:483773664 MySQL的数据类型包括整数类型.浮点数类型.定点数类型.日期和时间类型.字符串类型和二进制数据类型. 学习目标 整型包括哪些类型以及它们的取值范围 以tinyint为例,讲解了定义整型的三个属性 一.简介 整数类型是数据库中最基本的数据类型. 标准SQL中支持INTEGER和SMALLINT这两类整数类型. MySQL数据库除了支持这两种类型以外,还扩展支持了TINYINT.MEDIUMIN

MySQL入门很简单: 2 MySQL数据类型

2. MySQL数据类型 2.1 整数类型 后面的是默认显示宽度: tinyint(4) smallint(6) mediumint(9) int(11) bigint(20) 2.2 浮点型和定点数类型 MySQL可以指定浮点数和定点数的精度:    数据类型(M,D)  M:数据总长度, D:小数点后的长度

21分钟 MySQL 入门教程 && mysql数据类型

转自:http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html#c1 http://www.cnblogs.com/zbseoag/archive/2013/03/19/2970004.html 21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据类型 五.使用MySQL数据库 登录

DF学Mysql(三)——Mysql数据类型

Mysql数据类型分为:整数类型.浮点数类型.定点数类型日期与时间类型字符串类型二进制类型 整数类型 字节数 无符号数取值范围 有符号数取值范围TINYINT 1 0-255 -128-127SMALLINT 2 0-65535 -32768-32767MEDIUMINT 3 0-16777215 -8388608-8388607INT 4 0-4294967295 -2147483648-2147483647INTGER 4 0-4294967295 -2147483648-214748364