所以,我在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"?
领域:
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/
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |