【发布时间】:2015-03-02 15:11:00
【问题描述】:
我正在使用 derby 数据库构建桌面应用程序...在将数据插入到包含多个数据类型为“CHAR (10)”的列的表中时,数据库会在值中添加空格。例如。我添加了一个由 5 个字母组成的名称“Derby”,其余 5 个字母被添加为空格。当我从数据库中检索这些值时,问题就开始了,这些空白也与实际值一起检索。 “VARCHAR”数据类型不会发生这种情况。如何避免这种情况?
【问题讨论】:
我正在使用 derby 数据库构建桌面应用程序...在将数据插入到包含多个数据类型为“CHAR (10)”的列的表中时,数据库会在值中添加空格。例如。我添加了一个由 5 个字母组成的名称“Derby”,其余 5 个字母被添加为空格。当我从数据库中检索这些值时,问题就开始了,这些空白也与实际值一起检索。 “VARCHAR”数据类型不会发生这种情况。如何避免这种情况?
【问题讨论】:
这就是CHAR 数据类型在 SQL 标准中的定义方式。 Derby 只是遵循这些规则 as documented in the manual(基本上每个 DBMS 都遵守这些规则,但在某些情况下您可以禁用它)
您无法“避免”这种情况 - 如果您不想要该填充,只需使用 VARCHAR。
在我个人看来:CHAR 数据类型现在基本上没用了。在几乎所有 DBMS 中,VARCHAR 效率更高(因为它需要更少的存储空间)并且不会受到这种必需但烦人的填充行为的影响。
【讨论】:
trim() 是一个丑陋的解决方法。您应该改用正确的数据类型 (varchar)。停止使用char(对于任何 DBMS 都是如此)