DB2中的列名无效
我的一个表的列名有问题 我的DB2版本是DB2/LINUX8664 11.1.0。我正在CentOS Linux 7.2.1511版上运行它。我的IBMDataStudio版本是4.1.2 该列在模式“COMPRAS”的表“PERIODO”中命名为“NRO_AñO” 当我执行这个简单的查询时DB2中的列名无效,db2,db2-luw,Db2,Db2 Luw,我的一个表的列名有问题 我的DB2版本是DB2/LINUX8664 11.1.0。我正在CentOS Linux 7.2.1511版上运行它。我的IBMDataStudio版本是4.1.2 该列在模式“COMPRAS”的表“PERIODO”中命名为“NRO_AñO” 当我执行这个简单的查询时 SELECT NRO_AÑO FROM COMPRAS.PERIODO 它会产生以下错误: "NRO_AÑO" is not valid in the context where it is used..
SELECT NRO_AÑO
FROM COMPRAS.PERIODO
它会产生以下错误:
"NRO_AÑO" is not valid in the context where it is used.. SQLCODE=-206, SQLSTATE=42703, DRIVER=3.68.61
如果我执行查询
SELECT *
FROM COMPRAS.PERIODO
它生成具有以下列的数据
我猜这与所涉及的字符集有关,但我不确定该看哪里
提前谢谢。这对我很有用:
[db2inst1@server ~]$ db2 "create table compras.periodo (nro_año int)"
DB20000I The SQL command completed successfully.
[db2inst1@server ~]$ db2 "insert into compras.periodo values (1)"
DB20000I The SQL command completed successfully.
[db2inst1@server ~]$ db2 "insert into compras.periodo (nro_año) values (2)"
DB20000I The SQL command completed successfully.
[db2inst1@server ~]$ db2 "select nro_año from compras.periodo"
NRO_AÑO
-----------
1
2
2 record(s) selected.
可能您遇到了控制台编码问题(putty),您应该检查数据库中列的名称是如何存储的:
db2 "select colname from syscat.columns where tabname = 'PERIODO'"
COLNAME
--------------------------------------------------------------------------------------------------------------------------------
NRO_AÑO
1 record(s) selected.
从Putty(SSH客户端)创建表,然后从DataStudio中选择,然后高于128的字符将具有不同的表示形式。Java(DataStudio)使用UTF-8,但用于创建表的脚本可能使用了另一种编码,这在数据库(Putty、Windows、记事本等)中存在问题。它对我有效:
[db2inst1@server ~]$ db2 "create table compras.periodo (nro_año int)"
DB20000I The SQL command completed successfully.
[db2inst1@server ~]$ db2 "insert into compras.periodo values (1)"
DB20000I The SQL command completed successfully.
[db2inst1@server ~]$ db2 "insert into compras.periodo (nro_año) values (2)"
DB20000I The SQL command completed successfully.
[db2inst1@server ~]$ db2 "select nro_año from compras.periodo"
NRO_AÑO
-----------
1
2
2 record(s) selected.
可能您遇到了控制台编码问题(putty),您应该检查数据库中列的名称是如何存储的:
db2 "select colname from syscat.columns where tabname = 'PERIODO'"
COLNAME
--------------------------------------------------------------------------------------------------------------------------------
NRO_AÑO
1 record(s) selected.
从Putty(SSH客户端)创建表,然后从DataStudio中选择,然后高于128的字符将具有不同的表示形式。Java(DataStudio)使用UTF-8,但用于创建表的脚本可能使用了另一种编码,这在数据库(Putty、Windows、记事本等)中存在问题。当我在DB29.7上从DB2命令行处理器运行脚本时,它对我起到了作用
db2 => CREATE TABLE TEMP_TABLE(NRO_AÑO INTEGER)
DB20000I The SQL command completed successfully.
db2 => INSERT INTO TEMP_TABLE(NRO_AÑO) VALUES(1)
DB20000I The SQL command completed successfully.
db2 => SELECT * FROM TEMP_TABLE
NRO_AÑO
-----------
1
1 record(s) selected.
db2 => select colname from syscat.columns where tabname = 'TEMP_TABLE'
COLNAME
------------
NRO_AÑO
1 record(s) selected.
当我在DB29.7上从DB2命令行处理器运行脚本时,它对我起到了作用
db2 => CREATE TABLE TEMP_TABLE(NRO_AÑO INTEGER)
DB20000I The SQL command completed successfully.
db2 => INSERT INTO TEMP_TABLE(NRO_AÑO) VALUES(1)
DB20000I The SQL command completed successfully.
db2 => SELECT * FROM TEMP_TABLE
NRO_AÑO
-----------
1
1 record(s) selected.
db2 => select colname from syscat.columns where tabname = 'TEMP_TABLE'
COLNAME
------------
NRO_AÑO
1 record(s) selected.
您的问题还可能是列需要用引号括起来,如IBM Data Studio 4版中所示,例如: 插入DB2ADMIN.FB_WEB_帖子(“用户名”、“FaceID”、“FaceURL”、“FaceStory”、“FaceMessage”、“FaceDate”、“FaceStamp”)
值('SocialMate'、'233555900321179128370012103999'、'Some Message or Story'、'Random Files Project for Lotus Notes、Google、Oracle应用程序示例'、'2017-09-09'、'2017-09.23') 您的问题还可能是列需要用引号括起来,如IBM Data Studio 4版中所示,例如: 插入DB2ADMIN.FB_WEB_帖子(“用户名”、“FaceID”、“FaceURL”、“FaceStory”、“FaceMessage”、“FaceDate”、“FaceStamp”)
值('SocialMate'、'233555900321179128370012103999'、'Some Message or Story'、'Random Files Project for Lotus Notes、Google、Oracle应用程序示例'、'2017-09-09'、'2017-09.23') 您可以尝试以下查询:
从COMPRAS.PERIODO
中选择“NRO_AñO”吗?可能转义列名可以解决特殊字符问题。@TimBiegeleisen same-206错误。这看起来像是编码问题,但我对DB2了解不够,无法提供进一步帮助。数据库代码页是什么<代码>从SYSIBMADM.DBCFG中选择值,其中NAME='codepage'。Linux会话中的区域设置是什么?安装DataStudio时是否选择了相同的区域设置,或者它是默认的en_US
?根据您的其他评论,创建表时似乎发生了错误。检查db2 descripe table compras.periodo返回的内容以及table DDL语句(db2look-d yourdb-z compras-t periodo-e
)。您可能需要重新创建表。是否可以尝试此查询:从COMPRAS.PERIODO中选择“NRO_AñO”
?可能转义列名可以解决特殊字符问题。@TimBiegeleisen same-206错误。这看起来像是编码问题,但我对DB2了解不够,无法提供进一步帮助。数据库代码页是什么<代码>从SYSIBMADM.DBCFG中选择值,其中NAME='codepage'。Linux会话中的区域设置是什么?安装DataStudio时是否选择了相同的区域设置,或者它是默认的en_US
?根据您的其他评论,创建表时似乎发生了错误。检查db2 descripe table compras.periodo返回的内容以及table DDL语句(db2look-d yourdb-z compras-t periodo-e
)。可能您需要重新创建表。奇怪的是,syscat.columns中的列名为NULL!表结构包括列名。奇怪的是,syscat.columns中的列名为NULL!包含列名的表结构。