SQL 数据类型

devtools/2025/1/12 17:43:17/

数据类型是定义列中可以存储什么数据以及该数据实际怎样存储的基本规则。

数据类型用于以下目的:

  1. 数据类型允许限制可存储在列中的数据。例如,数值数据类型列只能接受数值。

  2. 数据类型允许在内部更有效地存储数据。可以用一种比文本字符串更简洁的格式存储数值和日期时间值。

  3. 数据类型允许变换排序顺序。如果所有数据都作为字符串处理,则1 位于10 之前,而10 又位于2 之前(字符串以字典顺序排序,从左边开始比较,一次一个字符)。作为数值数据类型,数值才能正确排序。

在设计表时,应该特别重视所用的数据类型。使用错误的数据类型可能会严重影响应用程序的功能和性能。更改包含数据的列不是一件小事(而且这样做可能会导致数据丢失)。

本文虽然不是关于数据类型及其如何使用的完整教材,但介绍了主要的数据类型、用途、兼容性等问题。

注意:任意两个DBMS 都不是完全相同的

以前曾经说过,现在还需要再次提醒。不同DBMS 的数据类型可能有很大的不同。在不同DBMS 中,即使具有相同名称的数据类型也可能代表不同的东西。关于具体的DBMS 支持何种数据类型以及如何支持的详细信息,请参阅具体的DBMS 文档。


1. 字符串数据类型

最常用的数据类型是字符串数据类型。它们存储字符串,如名字、地址、电话号码、邮政编码等。有两种基本的字符串类型,分别为定长字符串变长字符串(参见表C-1)。

定长字符串

定长字符串接受长度固定的字符串,其长度是在创建表时指定的。例如,名字列可允许30 个字符,而社会安全号列允许11 个字符(允许的字符数目中包括两个破折号)。定长列不允许多于指定的字符数目。它们分配的存储空间与指定的一样多。因此,如果字符串Ben 存储到30 个字符的名字字段,则存储的是30 个字符,缺少的字符用空格填充,或根据需要补为NULL。

变长字符串

变长字符串存储任意长度的文本(其最大长度随不同的数据类型和DBMS 而变化)。有些变长数据类型具有最小的定长,而有些则是完全变长的。不管是哪种,只有指定的数据得以保存(额外的数据不保存)。

既然变长数据类型这样灵活,为什么还要使用定长数据类型?答案是性能。DBMS 处理定长列远比处理变长列快得多。此外,许多DBMS 不允许对变长列(或一个列的可变部分)进行索引,这也会极大地影响性能。

提示:使用引号

不管使用何种形式的字符串数据类型,字符串值都必须括在单引号内。

注意:当数值不是数值时

你可能会认为电话号码和邮政编码应该存储在数值字段中(数值字段只存储数值数据),但是这样做并不可取。如果在数值字段中存储邮政编码01234,则保存的将是数值1234,实际上丢失了一位数字。

需要遵守的基本规则是:如果数值是计算(求和、平均等)中使用的数值,则应该存储在数值数据类型列中;如果作为字符串(可能只包含数字)使用,则应该保存在字符串数据类型列中。


2. 数值数据类型

数值数据类型存储数值。多数DBMS 支持多种数值数据类型,每种存储的数值具有不同的取值范围。显然,支持的取值范围越大,所需存储空间越多。此外,有的数值数据类型支持使用十进制小数点(和小数),而有的则只支持整数。表C-2 列出了常用的数值数据类型。并非所有DBMS 都支持所列出的名称约定和描述。

提示:不使用引号

与字符串不一样,数值不应该括在引号内。

提示:货币数据类型

多数DBMS 支持一种用来存储货币值的特殊数值数据类型。一般记为MONEY 或CURRENCY,这些数据类型基本上是有特定取值范围的DECIMAL 数据类型,更适合存储货币值。


3. 日期和时间数据类型

所有DBMS 都支持用来存储日期和时间值的数据类型(见表C-3)。与数值一样,多数DBMS 都支持多种数据类型,每种具有不同的取值范围和精度。

注意:指定日期

不存在所有DBMS 都理解的定义日期的标准方法。多数实现都理解诸如2020-12-30 或Dec 30th, 2020 等格式,但即使这样,有的DBMS 还是不理解它们。至于具体的DBMS 能识别哪些日期格式,请参阅相应的文档。

提示:ODBC 日期

因为每种DBMS 都有自己特定的日期格式,所以ODBC 创建了一种自己的格式,在使用ODBC 时对每种数据库都起作用。ODBC 格式对于日期类似于{d '2020-12-30'},对于时间类似于{t '21:46:29'},而对于日期时间类似于{ts '2020-12-30 21:46:29'}。如果通过ODBC 使用SQL,应该以这种方式格式化日期和时间。


4. 二进制数据类型

二进制数据类型是最不具有兼容性(幸运的是,也是最少使用)的数据类型。与迄今为止介绍的所有数据类型(它们具有特定的用途)不一样,二进制数据类型可包含任何数据,甚至可包含二进制信息,如图像、多媒体、字处理文档等(参见表C-4)。


http://www.ppmy.cn/devtools/149563.html

相关文章

Apifox=Postman+Swagger+Jmeter+Mock

A. 开发人员接口管理使用(Swagger 工具管理接口) B. 后端开发人员通过Postman 工具,一边开发一边测试 C. 前端开发人员需要Mock 工具提供前端调用 D. 测试人员通过(Postman、Jmeter)等工具进行接口测试 为了后台开发、前端开发、测试工程师等不同角色更加便捷管理…

HTML实战课堂之倒计时页面

一、目录: 一、目录: 二、代码说明: 1. **HTML部分**: 2. **CSS部分**: 3. **JavaScript部分**: 三、完整代码: 读前小提示: 要创建一个自定义背景的倒计时网页,这…

Android车机DIY开发之学习篇(一)编译UBOOT以正点原子为例

Android车机DIY开发之学习篇(一)编译UBOOT以正点原子为例 1.代码在u-boot文件夹下 2.在 U-Boot 源码目录下执行如下命令编译 U-Boot&#xff1a; ./make.sh rk3588生成两个文件 ### uboot.img 对应<SDK>/uboot/uboot.img ### rk3588_spl_loader_v1.13.113.bin 对应<…

git 转移文件夹

打开终端或命令行界面&#xff1a;首先&#xff0c;确保你的电脑上安装了 Git&#xff0c;并打开终端或命令行界面。 导航到你的仓库目录&#xff1a;使用 cd 命令来切换到包含你想要移动文件夹的仓库的目录。 cd /path/to/your/repository使用 git mv 命令移动文件夹&#x…

【PPT解密】ppt只读文档怎么改成可编辑文档

PPT文档打开是只读模式&#xff0c;如何改成可编辑文档呢&#xff1f;这需要分几种情况来说&#xff0c;所以今天将介绍几种方法帮助PPT只读文档改为可编辑文档。 方法一&#xff1a; 我们可以先查看一下文件属性&#xff0c;属性中有只读属性&#xff0c;当我们打开文档之后…

vue.js 插槽-作用域插槽

作用域插槽是Vue.js中一个强大的特性&#xff0c;可以让父组件向子组件传递数据&#xff0c;并在子组件中自定义渲染逻辑。在父组件中&#xff0c;可以通过 <template> 元素中的 slot-scope 属性声明一个插槽&#xff0c;并在子组件中使用 v-slot 指令来绑定具体的插槽内…

FreeROTS学习 内存管理

内存管理是一个系统基本组成部分&#xff0c;FreeRTOS 中大量使用到了内存管理&#xff0c;比如创建任务、信号量、队列等会自动从堆中申请内存&#xff0c;用户应用层代码也可以 FreeRTOS 提供的内存管理函数来申请和释放内存 FreeRTOS 内存管理简介 FreeRTOS 创建任务、队列…

【Uniapp-Vue3】v-model双向绑定的实现原理

我们想要实现双向绑定&#xff0c;只靠v-bind是无法完成的&#xff1a; 但是我们可以通过添加input事件实时修改iptvalue中的值实现双向绑定&#xff1a; 以上是使用v-bind结合input实现的双向绑定&#xff0c;可以直接使用v-model去实现双向绑定&#xff1a; 注意&#xff1a;…