create table with xml error

本文详细介绍了在使用DB2V9创建包含XML字段的表时遇到的问题,包括数据库需要UTF-8编码,并提供了正确的创建数据库和表的步骤。重点在于解决XML特征仅能在单一Unicode数据库分区中使用的限制。

 CREATE TABLE customer1(cid BIGINT NOT NULL PRIMARY KEY, info XML); 

log:

------------------------------ Commands Entered ------------------------------
CREATE TABLE customer1(cid BIGINT NOT NULL PRIMARY KEY, info XML);
------------------------------------------------------------------------------
CREATE TABLE customer1(cid BIGINT NOT NULL PRIMARY KEY, info XML)
DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL1239N  XML features can only be used in a Unicode database with a single
database partition.  SQLSTATE=42997

SQL1239N  XML features can only be used in a Unicode database with a single database partition.

 结果在网上看到如此的内容:

DB2 V9创建具有XML字段时的一个注意点(数据库需要UTF-8编码)

这是因为数据库本身不是Unicode导致的。正确步骤如下:
1. 创建一个UTF-8数据库:
create db test using codeset UTF-8 territory us;
2. 创建相应的表:
create table dept1(id int, doc xml);

 

当DBeaver执行SQL时出现`DBSQLException: [25006]: ERROR: cannot execute CREATE TABLE in a read-only transaction`错误,意味着当前事务被设置为只读,而创操作属于写操作,因此无法执行。可参考以下解决方法: ### 检查事务配置 在项目的事务配置文件里,通常会配置某些方法为只读事务。例如如下配置,以Spring的XML配置为例: ```xml <tx:advice id="advice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="find*" read-only="true" /> <tx:method name="query*" read-only="true" /> <tx:method name="get*" read-only="true" /> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> ``` 在这个配置中,以`find`、`query`、`get`开头的方法被设置为只读事务。若执行操作的方法名匹配到了只读配置,就需要对配置进行修改。比如,将创操作的方法名排除在只读配置之外,或者把该方法的只读属性设为`false`: ```xml <tx:advice id="advice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="find*" read-only="true" /> <tx:method name="query*" read-only="true" /> <tx:method name="get*" read-only="true" /> <!-- 假设创的方法名为 createTable,将其只读属性设为 false --> <tx:method name="createTable" read-only="false" /> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> ``` ### 手动开启非只读事务 若使用的是DBeaver的SQL编辑器,可手动开启一个非只读事务。例如在MySQL中,可按如下步骤操作: ```sql -- 开始事务 START TRANSACTION; -- 执行的SQL语句 CREATE TABLE your_table_name ( id INT PRIMARY KEY, name VARCHAR(255) ); -- 正常提交事务 COMMIT; ``` 若执行过程中出现问题,可使用`ROLLBACK`语句回滚事务,使数据恢复到开始事务时的状态: ```sql ROLLBACK; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值