Firebird中的表名有很多额外的空间

Jac*_*ian 5 sql firebird

所以,我在Firebird中创建了一个表,使用Python fdb库,如下所示:

>>> import fdb

>>> conn = fdb.connect(...)
>>> sql = "CREATE TABLE test_table(id integer not null)"
>>> cursor = conn.cursor()
>>> cursor.execute(sql)
>>> conn.commit()
Run Code Online (Sandbox Code Playgroud)

但是,当我列出表格时,我得到了这个奇怪的结果:

>>> tables = []
>>> sql = "select rdb$relation_name from rdb$relations 
       where rdb$view_blr is null and (rdb$system_flag is null or rdb$system_flag = 0)"
>>> cursor.execute(sql)
>>> res = cursor.fetchall()
        for r in res:
            tables.append(r[0])
>>> tables
['TEST_TABLE                     ']
Run Code Online (Sandbox Code Playgroud)

到底他妈发生了什么?这个愚蠢的额外空间来自哪里?为什么我的桌子被命名"TEST_TABLE "而不仅仅是"TEST_TABLE"

Val*_*nov 6

领域:

RDB$RELATION_NAME is CHAR(31)
Run Code Online (Sandbox Code Playgroud)

CHAR填充空格.

最重要的区别是CHAR填充空格而VARCHAR填充空格.例如,如果您有:

CREATE TABLE t1(c1 VARCHAR(2),c2 CHAR(2));

INSERT INTO t1(c1,c2)VALUES('a','a');

列c1将包含值'a',而列c2将包含具有额外空格的值'a'.进行比较时会忽略尾随空格,因此两列都将匹配

在哪里c ='a'

一些查询的子句.LIKE运算符遵循尾随空格,这对于初学者来说是一个混乱的来源

见:http://www.firebirdfaq.org/faq237/