MySQL基础教程1 — 数据类型之数值类型
技术百科
黄舟
发布时间:2017-02-24
浏览: 次 MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
bit数据类型保存位字段值,并且支持myisam、memory、innodb和bdb表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
| 类型 | 字节 | 最小值 | 最大值 |
| (带符号的/无符号的) | (带符号的/无符号的) | ||
| TINYINT | 1 | -128 | 127 |
| 0 | 255 | ||
| SMALLINT | 2 | -32768 | 32767 |
| 0 | 65535 | ||
| MEDIUMINT | 3 | -8388608 | 8388607 |
| 0 | 16777215 | ||
| INT | 4 | -2147483648 | 2147483647 |
| 0 | 4294967295 | ||
| BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
| 0 | 18446744073709551615 |
MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。
显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。
所有整数类型可以有一个可选(非标准)属性UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。
浮点和定点类型也可以为UNSIGNED。同数类型,该属性防止负值保存到列中。然而,与整数类型不同的是,列值的上范围保持不变。
如果为一个数值列指定ZEROFILL,MySQL自动为该列添加UNSIGNED属性。
对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。
FLOAT类型用于表示近似数值数据类型。SQL标准允许在关键字FLOAT后面的括号内选择用位指定精度(但不能为指数范围)。MySQL还支持可选的只用于确定存储大小的精度规定。0到23的精度对应FLOAT列的4字节单精度。24到53的精度对应DOUBLE列的8字节双精度。
MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。
MySQL将DOUBLE视为DOUBLE PRECISION(非标准扩展)的同义词。MySQL还将REAL视为DOUBLE PRECISION(非标准扩展)的同义词,除非SQL服务器模式包括REAL_AS_FLOAT选项。
为了保证最大可能的可移植性,需要使用近似数值数据值存储的代码应使用FLOAT或DOUBLE PRECISION,不规定精度或位数。
DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度和标度;例如:
salary DECIMAL(5,2)
在该例子中,5是精度,2是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。
在MySQL 5.1中以二进制格式保存DECIMAL和NUMERIC值。
标准SQL要求salary列能够用5位整数位和两位小数保存任何值。因此,在这种情况下可以保存在salary列的值的范围是从-999.99到999.99。
在标准SQL中,语法DECIMAL(M)等价于DECIMAL(M,0)。同样,语法DECIMAL等价于DECIMAL(M,0),可以通过计算确定M的值。在MySQL 5.1中支持DECIMAL和NUMERIC数据类型的变量形式。M默认值是10。
DECIMAL或NUMERIC的最大位数是65,但具体的DECIMAL或NUMERIC列的实际范围受具体列的精度或标度约束。如果此类列分配的值小数点后面的位数超过指定的标度允许的范围,值被转换为该标度。(具体操作与操作系统有关,但一般结果均被截取到允许的位数)。
BIT数据类型可用来保存位字段值。BIT(M)类型允许存储M位值。M范围为1到64。
要指定位值,可以使用b'value'符。value是一个用0和1编写的二进制值。例如,b'111'和b'100000000'分别表示7和128。
如果为BIT(M)列分配的值的长度小于M位,在值的左边用0填充。例如,为BIT(6)列分配一个值b'101',其效果与分配b'000101'相同。
当要在一个数值列内保存一个超出该列允许范围的值时,MySQL的操作取决于此时有效的SQL模式。如果模式未设置,MySQL将值裁剪到范围的相应端点,并保存裁减好的值。但是,如果模式设置为traditional(“严格模式”),超出范围的值将被拒绝并提示错误,并且根据SQL标准插入会失败。
如果INT列是UNSIGNED,列范围的大小相同,但其端点会变为到0和4294967295。如果你试图保存-9999999999和9999999999,以非严格模式保存到列中的值是0和4294967296。
如果在浮点或定点列中分配的值超过指定(或默认)精度和标度规定的范围,MySQL以非严格模式保存表示范围相应端点的值。
当MySQL没有工作在严格模式时,对于ALTER TABLE、LOAD DATA INFILE、UPDATE和多行INSERT语句,由于裁剪发生的转换将报告为警告。当MySQL工作在严格模式时,这些语句将失败,并且部分或全部值不会插入或更改,取
决于是否表为事务表和其它因素。
以上就是MySQL基础教程1 —— 数据类型之数值类型的内容,更多相关内容请关注PHP中文网(www.)!
# 的是
# 是一个
# 可选
# 如果你
# 可以使用
# 要在
# mysql
# 为该
# 浮点
# 括号内
# 非标准
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Mac如何修复应用程序权限问题_Mac磁盘工具修复
- c++ std::future和std::prom
- Windows7如何安装系统镜像_Windows7
- Win11怎么查看电脑配置_Win11硬件配置详细
- PHP接收参数值为空怎么办_判断和处理空参数方法说
- php嵌入式日志记录怎么实现_php将硬件数据写入
- Win10怎么设置开机密码_Windows10账户
- Windows蓝屏错误0x0000002C怎么解决
- VSC怎么在PHP中调试MySQL_数据库交互排查
- PHP 中如何在函数内持久化修改引用变量的指向
- c++ nullptr与NULL区别_c++11空
- Win11怎样激活系统密钥_Win11系统密钥激活
- 作用域操作符会影响性能吗_php静态调用性能分析【
- C#如何序列化对象为XML XmlSerializ
- 如何高效识别并拦截拼接式恶意域名 spam
- Linux如何挂载新硬盘_Linux磁盘分区格式化
- 如何使用Golang管理模块版本_Golanggo
- Win11鼠标灵敏度怎么调 Win11鼠标指针移动
- Mac系统更新下载慢或失败怎么办_解决macOS升
- Win11怎么设置声音输出设备_Windows11
- Python包结构设计_大型项目组织解析【指导】
- 如何在 Go 中正确反序列化 XML 多节点数组(
- Windows10如何删除Windows.old_
- MAC怎么设置程序窗口永远最前_MAC窗口置顶插件
- 小程序里php怎么变mp4_小程序调用php生成m
- MAC如何隐藏文件夹及文件_MAC终端命令隐藏与第
- php怎么捕获异常_trycatch结构处理运行时
- Win11怎么关闭定位服务_保护Win11位置隐私
- Win11怎么修改DNS服务器 Win11设置DN
- Python字符串操作教程_切片拼接与格式化详解
- PowerShell怎么创建复杂的XML结构
- 如何在 Go 结构体中正确初始化 map 字段
- php内存溢出怎么排查_php内存限制调试与优化方
- Python迭代器生成器进阶教程_节省内存与懒加载
- Windows10如何更改桌面图标间距_Win10
- 如何使用Golang匿名函数_快速定义临时函数逻辑
- Windows蓝屏错误0x0000001E怎么修复
- Win11怎么关闭防火墙通知_屏蔽Win11安全中
- Win10电脑怎么设置休眠快捷键_Windows1
- 如何在Golang中修改数组元素_通过指针实现原地
- Win11屏幕亮度突然变暗怎么解决_自动变暗问题处
- 如何在包含多值的列中精准搜索指定演员?
- Win11怎么硬盘分区 Win11新建磁盘分区详细
- 如何在 Go 中比较自定义的数组类型(如 [20]
- MySQL 中使用 IF 和 CASE 实现查询字
- Windows蓝屏错误0x00000018怎么处理
- 如何使用Golang实现聊天室消息存档_存储聊天记
- 如何使用Golang处理静态文件缓存_提高页面加载
- Drupal 中渲染节点时出现 HTML 标签嵌套
- Python实现图数据库操作_Neo4j核心CRU

QQ客服