Oracle 11g中CHAR(4)列自动补前零及查询匹配问题咨询
Oracle 11g CHAR列相关问题解答
1. CHAR列是否会自动为值补前零?
不会。CHAR(n)类型的核心特性是固定长度存储,当插入的字符串长度小于n时,Oracle会自动在字符串末尾补空格,而非前零。你看到的'0018'、'0123'这类带前零的值,是插入数据时明确输入的,并非数据库自动补充的前零。比如插入'18'到CHAR(4)列,实际存储的是'18 '(末尾带两个空格),而非'0018'。
2. 查询时数字与字符串条件的匹配差异
这是Oracle的隐式类型转换规则导致的:
- 当使用不带引号的数字条件
SELECT * FROM TABLE_A WHERE COLUMN_1=18;时,Oracle会将CHAR列的所有值转换为数字类型进行比较。'0018'转换成数字后是18,和条件中的18相等,因此能匹配到对应行。 - 当使用带引号的字符串条件
SELECT * FROM TABLE_A WHERE COLUMN_1='18';时,Oracle会进行精确字符串匹配。CHAR(4)列存储的'0018'是4个字符长度,而条件中的'18'是2个字符长度,二者逐字符对比不相等,因此无结果。只有当条件字符串长度和CHAR列定义长度一致(比如'0018')时,才能精确匹配。
内容的提问来源于stack exchange,提问作者rodneyc8063
相关产品推荐
相关产品推荐

