MySQL的数据类型包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型和二进制数据类型。不同数据类型决定了数据的存储格式、有效范围和相应的限制。

1、整数类型

MySQL支持的整数类型如下表所示

vcjnz8KjujwvcD4NCjxibG9ja3F1b3RlPg0KCTxwPsr9vt3A4NDNo6jP1Mq+v+22yKOpPC9wPg0KPC9ibG9ja3F1b3RlPg0KPHA+z9TKvr/ttsjWuMTcubvP1Mq+tcTX7rTzyv2+3bXEs6S2yKGj1Nqyu9a4tqi/7bbItcTH6b/2z8KjrNX7yv3A4NDNtcTErMjPz9TKvr/ttsjT68bk09C3+7rFyv21xNfutPPWtbXEz9TKvr/ttsjP4M2soaPI50lOVNDNzqoxMaOsQklHSU5U0M3OqjIwoaM8YnIgLz4NCjxzdHJvbmc+tavKtbzKyc+jrLy0yrmz9sjrtcTK/b7dtcS/7bbItPPT2sHLyejWw7XEz9TKvr/ttsijrLWr1rvSqtCh09q1yNPaxKzIz7/ttsijrL7Nv8nS1NX9s6PN6tX7tcTP1Mq+s/bAtKGjPC9zdHJvbmc+PC9wPg0KPGgyIGlkPQ=="2浮点数类型和定点数类型">2、浮点数类型和定点数类型

浮点数类型和定点数类型用来表示小数。包括以下类型

其中,定点数类型的M指精度,是数据的总长度。小数点并不占位置,D为标度,指小数点后的长度。当插入数据的精度高于实际定义的精度时,系统会自动进行四舍五入处理。浮点数类型FLOAT和DOUBLE在四舍五入时不会报错,但定点数类型DECIMAL会有警告。

当未指定精度时,DECIMAL型会默认整数位为10,小数位为0,即默认为整数。

由于定点数在MySQL中是以字符串形式存储的,其精度比浮点数高,而且浮点数会出现误差,在对数据精度要求高的情况下,选择DECIMAL比较安全。

3、日期和时间类型

当插入的数据值超过了该类型的取值范围时,系统会报错,并将相应的零值插入到数据库中。

3.1 Year类型

向Year类型插入数据时可以直接用数字也可以用字符串,对于低于4位的会自动转换,如输入32,‘78’,3,‘2’会分别转换为2032,1978,2003和2002。

注意‘0’和‘00’都会转换为2000,而0会转化为0000。

3.2 Time类型

Time类型的数据赋值方式如下

‘D HH:MM:SS’格式的字符串,或者’HHMMSS’格式的字符串或者HHMMSS格式的数值,其中D表示天数,取值范围为0~34,保存时会自动将D转换到HH处,如输入‘2 11:32:21’会转换为’59:32:21’,当然输入不必严格遵守上述格式,系统会自动转换,具体规则可以自己尝试。如’2 20’,’2 20:20’,’30’和’345454’会转换为’68:00:00’,’68:20:00’,’00:00:30’和’34:54:54’。即基本符合从左向右分配。

当HH和SS的赋值大于60时,即此值无效,系统会报错,并将其转换为00:00:00。在输入数据合法但超出Time值范围时,会被裁为范围内最接近的端点,如’880:00:00’会转换为’838:59:59’。

可以适用CURRENT_TIME和NOW()出入当前系统时间。

3.3 DATE类型

可以适用’YYYY-MM-DD’或’YYYYMMDD’格式的字符串、’YY-MM-DD’或’YYMMDD’格式的字符串、YYYYMMDD或YYMMDD格式的数字表示。

同样可以使用CURRENT_DATE或者NOW()来输入当前系统日期。

3.4 DATETIME类型

DATATIME类型相当于DATE类型和TIME类型的组合。

当某字段的数据类型为DATETIME时,使用NOW()可以输入当前系统日期和时间。

3.5 TIMESTAMP类型

与DATETIME类型相同点:

- 显示格式相同

- 复制方法相同

- 用NOW()转为换系统当前时间

与DATETIME类型不同点:

- 比DATETIME类型范围小

- 使用CURRENT_TIMESTAMP来输入系统当前日期和时间

- 输入NULL或无任何输入时,系统自动输入系统当前日期和时间

- 该类型能够根据不同的地区的时区来转换时间

4、字符串类型

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

4.1 CHAR和VARCHAR类型

两者都是在创建表时就指定了最大长度,基本形式如下

字符串类型(M)

注意CHAR类型的长度是固定的,永远是指定的M,其值可以是0~255的任意值。

而VARCHAR类型的长度是可变的,创建时指定的M只是最大长度,可以取0~65535之间任意值。即在最大值M范围内使用多少分配多少,实际占用空间为字符串的实际长度加1,此1为字符串的结束标志符。因此会保存输入字符串最后的空格,而前者不会。

当出入的字符串长度大于可插入最大值时,系统会阻止插入并报错。

虽然VARCHAR比CHAR占用空间小、更灵活,但处理速度却比不上CHAR型,所以对于长度变化不大和查询速度要求较高的字符串类型,最好还是选择CHAR类型。

4.2 TEXT类型

TEXT类型只能保存字符数据,具体分类有

4.3 ENUM类型

ENUM类型又称为枚举类型。在创建表时,其取值范围就以列表的形式制定了。基本形式如下

属性名 ENUM(‘值1’, ‘值2’, ···,’值n’)

其中,属性名指字段的名称,’值n’表示列表中的第n个值,这些值末尾的空格都会被系统直接删除。

ENUM类型的值只能取列表中的一个元素。取值列表中最多可以有65535个值。列表中的每个值都有一个顺序排列的编号,MySQL中存储的是这个编号而非列表中的具体值。

4.4 SET类型

一般来说,如果只能选取列表中的一个值,就选择ENUM类型,如果需要选取列表中的多个值的组合,则需要选择SET类型。

同样,在创建表时,其取值范围就以列表的形式制定了。基本形式如下

属性名 SET(‘值1’, ‘值2’, ···,’值n’)

具体同ENUM类型。

在取多个元素时,不同元素之间用逗号隔开,SET类型的值最多只能是有64个元素构成的集合。同ENUM,存储的是编号而非具体值。

插入记录时,SET字段中的元素顺序无关紧要,系统会自动按照定义时的顺序显示。

如SET类型的取值类表为(‘A’,’B’,’C’,’D’,’E’),插入值为(‘B’)和(‘C,B,D’)时,结果显示为(B)和(B,C,D)。

5、二进制类型

5.1 BINARY和VARBINARY类型

类似于CHAR和VARCHAR类型的关系和使用方法。

对于CHAR来说,不足最大长度的空间用“ ”补全。

5.2 BIT类型

BIT类型也是在创建表时指定了最大长度,基本形式为

BIT(M)

如字段的类型为BIT(4),则存储的数据是从0~15。

在查询BIT类型的数据时,要用BIN(字段名+0)来将值转换为二进制显示。

5.3 BLOB类型

此为一种特殊的二进制类型,可以用来保存数据量很大的二进制数据,如图片等。包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。

BLOB类型主要用来存储图片、PDF文档等二进制文件。通常来说,可以将这些文件存储在文件系统中,然后在数据库中存储这些文件的路径,这种方式比直接存储在数据库中简单,当然访问速度也会慢一些。

6、选择数据类型

在MySQL中创建表时需要考虑为字段选择哪种数据类型最合适。基本注意事项可以参考上述总结。

下面是一些常见问题

6.1 可以存储路径的数据类型

6.2 BOOL类型

6.3 JPG和MP3等格式的储存

mysql创建bit类型报错_MySQL入门(三)——MySQL数据类型相关推荐

  1. 安装完MySQL后启动报错_MySQL数据库之mysql编译安装完成后,启动时报错The server quit without updating PID file...

    本文主要向大家介绍了MySQL数据库之mysql编译安装完成后,启动时报错The server quit without updating PID file ,通过具体的内容向大家展现,希望对大家学习 ...

  2. mysql修改密码总是报错_mysql修改密码报错 | 吴老二

    mysql已经安装好了,不过重置密码的时候使用update修改mysql的密码出现了报错,我的mysql是5.7版本的 mysql> use mysql Reading table inform ...

  3. mysql命令导入存储过程报错_mysql导入存储过程时declare报错的有关问题解决

    在导入存储过程时经常遇见下列DECLARE报错的问题: ? Error Code : 1064 You have an error in your SQL syntax; check the manu ...

  4. Mysql使用Double类型报错Out of range value的解决

    # mysql版本:5.6.24 select version(); # 创建一个带double类型字段的表 CREATE TABLE double_test (id VARCHAR(32) PRIM ...

  5. mysql用declare会报错_mysql导入存储过程时declare报错的问题解决

    在导入存储过程时经常遇见下列DECLARE报错的问题: Error Code : 1064 You have an error in your SQL syntax; check the manual ...

  6. Node.js 连接 MySQL 插入 TEXT 类型报错问题

    由于开发需要存储大量文本(其实是一个结构化对象字符串),考虑到 char 以及 varchar 都不够大,所以打算用 TEXT 类型,顺便记一下 TEXT.MEDIUMTEXT 以及 LONGTEXT ...

  7. mysql创建存储函数报错:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL...

    在创建存储函数的时候出现了报错: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL D ...

  8. mysql导出txt文件报错_mysql导入txt文件

    1.首先在命令行启动mysql net start mysql 2.登录MySQL(建议使用非root用户) mysql --local-infile=1 -u one -p 3.创建数据库 如 CR ...

  9. mysql查询新建查询报错_mysql开启慢查询报错:

    1.进入mysql命令行:#mysql -uroot -p123456,执行下面的命令开启慢查询报错: set global slow_query_log=on; set global long_qu ...

最新文章

  1. HTML怎么编写可关闭广告,JS实现关闭小广告特效
  2. Selenium3.X 与 Javascript (Nodejs)
  3. Windows 2003 Server服务器上IIS发布网站具体步骤
  4. 获取自动增涨列的表中添加完成后的数据
  5. 处理大数必选BigInteger(记洛谷P1009题WA的经历,Java语言描述)
  6. 时评:别让智能设备成为网络安全的“蚁穴”
  7. Hibernate中封装session(静态单例模式)
  8. 解决Linux里面未启用网卡的问题
  9. SQL Server 审计操作概念
  10. 临时邮箱,20分钟,30分钟,60分钟
  11. 【英语语法入门】 第14讲 副词
  12. 贴出最新整理的英语谚语大全 3267条
  13. 深度报道 | 瀚高软件CTO郑晓军:以开源之路发展国产数据库符合市场规律
  14. 正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)
  15. 现阶段网络广告的形式并举例说明?
  16. 共享充电宝之争:胜于专利,败于骂街 | 一点财经
  17. ArduPilot飞行前检查——PreArm解析
  18. [Python中的除法、除法取整、除法取余] [运算符分别为:/、//、%]
  19. ASP.NET 页面中的 ValidateRequest属性
  20. VSCode安装和使用教程

热门文章

  1. [debug] RuntimeError: “nll_loss_forward_reduce_cuda_kernel_2d_index“ not implemented for ‘Int‘
  2. js中字符串类型转化toString、parseInt、parseFloat、Number
  3. jquery系列教程5-动画操作全解
  4. Ubuntu图形界面更改软件下载源为清华镜像站以及解决等待apt退出的问题
  5. 贺利坚老师汇编课程61笔记:操作显存数据即在屏幕上显示
  6. Unity3D笔记 愤怒的小鸟四 实现Selelction界面
  7. 我用VS2015 开发webapp (1) 需求、目的、配置
  8. Jmeter性能测试实战教程系列-搭建分布式性能测试环境(五)
  9. 【node】node连接mongodb操作数据库
  10. [转]memcached+magent实现memcached集群