为啥我不能修剪 CHAR 类型的列?
Posted
技术标签:
【中文标题】为啥我不能修剪 CHAR 类型的列?【英文标题】:Why can't I trim a column of type CHAR?为什么我不能修剪 CHAR 类型的列? 【发布时间】:2021-02-24 16:49:58 【问题描述】:如标题所说,如果在我的数据库中创建一个表:
创建表测试 ( 字段 CHAR(20 CHAR) NULL ) 打瞌睡 无压缩 NOCACHE;
插入:
插入测试 (场地) 价值观 ('TEST - 这里是空格-'); 提交;
然后我运行以下语句:
更新测试集 FIELD = TRIM(FIELD); 提交;
但该字段仍然有空格,请注意,如果我将数据类型更改为 varchar2,它可以工作...有人知道为什么吗?
谢谢!
【问题讨论】:
因为 char 数据类型适用于固定长度的字符串,因此它始终具有您在 DDL 中指定的 char 数量。否则使用 varchar2 【参考方案1】:char
是一个固定宽度的数据类型。 char(20)
的长度始终为 20。如果您尝试插入较短的字符串,它将用空格填充到字段的固定宽度长度。所以
UPDATE TEST SET FIELD = TRIM(FIELD);
由于trim
函数而删除空格,然后将它们添加回来,因为写入的字符串必须正好是 20 字节长。
实际上,几乎没有使用char
的情况。使用varchar2
几乎总是会更好。 varchar2
是可变长度数据类型,因此数据库无需在末尾附加空格。
【讨论】:
“几乎从不”中的“几乎”是正确的。当我们告诉初学者这一点时,给他们一些例外的例子是有帮助的(表明例外确实很少)。您可以有效地将char(1)
用于性别/性别列,或使用是/否 ('Y'/'N') 列,或者将 char(2)
用于美国的州代码,例如 CA、NY、FL。这是该列应该始终存储预定长度的字符串的时候;填充应该(几乎)永远不会真正发挥作用。以上是关于为啥我不能修剪 CHAR 类型的列?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 char** 不能成为 C++ 中以下函数的返回类型?
c++程序 我为啥不能将string类的变量赋给char数组,我按书上打的?