达梦数据库:数据类型

📅 2026/8/22 9:39:08
达梦数据库:数据类型
达梦数据库DM数据类型学习报告报告日期2026年8月20日数据库版本DM8一、前言达梦数据库DM是国产自主研发的关系型数据库管理系统兼容 SQL-92 标准并在此基础上进行了大量扩展。掌握达梦数据库的数据类型体系是进行数据库设计、SQL 开发及性能优化的基础。本报告系统梳理了达梦数据库的数据类型分类、各类型含义、数据类型转换规则以及强/弱数据类型的概念并结合实际场景给出使用建议。二、数据类型概述达梦数据库的数据类型主要分为以下7 大类大类包含类型字符数据类型CHAR、CHARACTER、VARCHAR、VARCHAR2、NCHAR、NVARCHAR2、LONGVARCHAR数值数据类型精确数值型NUMERIC、DECIMAL、NUMBER、INTEGER、BIGINT、SMALLINT、TINYINT、BYTE 等近似数值型FLOAT、DOUBLE、REAL、DOUBLE PRECISION 等位串数据类型BIT日期时间数据类型DATE、TIME、TIMESTAMP/DATETIME、TIME WITH TIME ZONE、TIMESTAMP WITH TIME ZONE、INTERVAL 系列多媒体/大字段数据类型TEXT、CLOB、BLOB、IMAGE、BFILE二进制数据类型BINARY、VARBINARY其他类型ROWID、BOOLEAN/BOOL、MONEY 等此外DMSQL 还扩展支持了%TYPE、%ROWTYPE、记录类型、数组类型、集合类型和类类型用户还可以自定义子类型。三、各类数据类型详解3.1 字符数据类型类型说明CHAR(n) / CHARACTER(n)定长字符串长度不足时系统自动填充空格。最大长度由数据库页面大小决定定义上限为 32767 字节VARCHAR(n)变长字符串只占用实际字节空间。实际最大存储长度由数据页大小决定若指定USING LONG ROW存储选项则不受数据页大小限制VARCHAR2(n)与 VARCHAR 类似为兼容 Oracle 而提供NCHAR(n) / NVARCHAR2(n)根据字符集决定的定长/变长字符串关键参数说明UNICODE_FLAG控制字符集0 GB180301 UTF-8LENGTH_IN_CHAR控制长度单位0 以字节为单位1 以字符为单位这两个参数直接影响字符串中能存储的汉字个数设计表结构时必须考虑。3.2 数值数据类型3.2.1 精确数值类型类型精度/标度取值范围NUMERIC(p,s)精度 1~38标度 ≤ 精度存储零、正负定点数DECIMAL/DEC(p,s)与 NUMERIC 相似同上NUMBER(p,s)与 NUMERIC 相同同上INTEGER / INT精度 10标度 0-2,147,483,648 ~ 2,147,483,647BIGINT精度 19标度 0-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807SMALLINT精度 5标度 0-32,768 ~ 32,767TINYINT / BYTE精度 3标度 0-128 ~ 127示例NUMERIC(4,1)定义了小数点前 3 位、小数点后 1 位共 4 位数字范围在 -999.9 到 999.9。超过精度会报错超过标度则多余的位被截断。3.2.2 近似数值类型类型说明FLOAT带二进制精度的浮点数DOUBLE / DOUBLE PRECISION双精度浮点数REAL二进制精度 24十进制精度 7使用建议涉及金额、精确计算的字段应使用 NUMERIC/DECIMAL 等精确数值类型避免使用 FLOAT/DOUBLE 导致精度丢失。3.3 位串数据类型类型说明BIT用于存储整数数据 1、0 或 NULL。只有 0 才转换为假其他非空、非 0 值都会自动转换为真可用于支持 ODBC 和 JDBC 的布尔数据类型3.4 日期时间数据类型类型说明DATE日期型包括年、月、日信息TIME时间型包括时、分、秒信息精度到毫秒TIMESTAMP / DATETIME时间戳型包括年、月、日、时、分、秒TIMESTAMP WITH TIME ZONE带时区的时间戳INTERVAL YEAR/MONTH/DAY/SECOND时间间隔类型3.5 多媒体/大字段数据类型类型说明最大长度TEXT / LONGVARCHAR长文本数据1~2GCLOB字符大对象1~2GBLOB二进制大对象1~2GIMAGE / LONGVARBINARY图像或其他二进制数据1~2GBFILE存放在数据库外的二进制数据只读操作系统限制3.6 二进制数据类型类型说明BINARY(n)定长二进制数据缺省长度 1 字节VARBINARY(n)变长二进制数据缺省长度 8188 字节四、数据类型转换达梦数据库的数据类型转换分为显式转换和隐式转换两种。4.1 显式转换手动转换通过转换函数强制指定类型转换函数用途示例CAST(value AS type)通用类型转换CAST(123 AS INT)TO_CHAR()日期/数值转字符串TO_CHAR(SYSDATE, YYYY-MM-DD)TO_DATE()字符串转日期TO_DATE(2026-08-20, YYYY-MM-DD)CONVERT(type, value)类型转换type 在前value 在后CONVERT(VARCHAR(32767), vul_msg)使用注意事项CAST 将数值转 CHAR 有限制建议转 VARCHARCAST 不支持将字符串直接转 DATETIME需用 TO_DATECLOB 类型用 CAST 只可转换为 VARCHAR、VARCHAR2、CHAR、CHARACTER、TEXT不支持直接转 INT达梦从 8.1.2.97 版本开始支持::双冒号强制类型转换语法4.2 隐式转换自动转换达梦数据库在执行 SQL 时会自动将不同数据类型的操作数转换为同一类型遵循以下基本原则低精度向高精度转换、强类型向弱类型转换、兼容类型可自动转换常见隐式转换场景字符串与数值之间自动转换日期与字符串之间自动转换不同精度数值之间自动转换隐式转换的潜在风险风险说明索引失效索引列发生隐式转换会导致无法使用索引被迫全表扫描性能下降转换过程增加计算开销精度丢失高精度向低精度转换可能丢失数据查询异常/报错类型不兼容时转换失败典型案例VARCHAR 类型的索引列 phone 与数值比较时会优先将字符串转换为数值类型导致索引失效。因此查询时传递的参数类型最好与条件字段类型一致避免类型转换引起的耗时和异常。五、强数据类型与弱数据类型5.1 概念解释概念含义强数据类型数据类型定义严格不同类型之间不允许随意混合运算必须显式转换。精度更高、范围更广的类型通常被视为强类型弱数据类型类型约束较宽松系统允许在不同类型之间自动进行隐式转换。精度较低、范围较窄的类型通常被视为弱类型5.2 达梦数据库中的体现达梦的隐式转换遵循“强类型向弱类型转换”的原则。具体表现为数值类型优先级高于字符串类型VARCHAR 与数值比较时字符串会被转为数值低精度向高精度转换如 INT 与 BIGINT 运算时INT 会转为 BIGINT不同整数类型运算结果类型转换为范围较大的那个整数类型含近似数值类型的运算只要有一个操作数为近似数值类型结果即为近似数值类型实测验证在达梦数据库中CHAR类型字段与INT类型字段使用比较运算符如、、时系统会自动进行隐式类型转换不会报错。例如SELECT CASE WHEN 1 45 THEN 1 ELSE 0 END可以正常执行。5.3 达梦的类型定位达梦总体上属于强类型数据库—— 类型定义严格但由于兼容性考虑也支持一定程度的隐式转换。开发者应尽量避免依赖隐式转换主动使用显式转换以确保数据准确性和查询性能。六、总结与建议知识点要点数据类型分类字符型、数值型精确/近似、位串型、日期时间型、多媒体型、二进制型等字符型关键参数UNICODE_FLAG字符集和LENGTH_IN_CHAR长度单位影响存储数值型精度NUMERIC 精度范围 1~38标度 ≤ 精度金额计算优先使用精确数值型显式转换CAST、TO_CHAR、TO_DATE、CONVERT建议优先使用显式转换隐式转换原则低精度 → 高精度、强类型 → 弱类型、兼容类型自动转换隐式转换风险索引失效、性能下降、精度丢失、查询报错强弱类型达梦为强类型数据库但支持一定隐式转换建议尽量使用显式转换开发建议表设计阶段根据实际业务需求选择最小适用类型避免过度使用大对象类型查询编写阶段传递的参数类型尽量与条件字段类型一致防止隐式转换导致索引失效数值计算阶段涉及金额等精确计算时务必使用 NUMERIC/DECIMAL避免 FLOAT/DOUBLE类型转换阶段优先使用显式转换CAST/CONVERT代码清晰且可控字符存储阶段注意UNICODE_FLAG和LENGTH_IN_CHAR参数对汉字存储个数的影响七、参考文献达梦数据库官方文档 —— 《DM8 SQL 语言使用手册》达梦数据库官方文档 —— 《DM8 DMSQL 程序设计》达梦数据库安装目录dmdbms/doc/DM8_SQL语言使用手册.pdf本文原创于达梦技术社区https://eco.dameng.com/