# PowerDesigner 生成 SQL 带注释避免 comment 报错

# powerdesigner 16.5 生成的 sql 语句在 mysql 数据库无法成功执行

用 pd 导出的 sql, 默认无法正常执行会报错

[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'comment on table TB_PAYOUT_APPLY_UNIQUE is 
'结汇申请防重表'' at line 1

默认导出 sql 为:

# 为了减少篇幅,减少了部分字段注释
create table TB_PAYOUT_APPLY_UNIQUE 
(
   SRC_MERCHANT_ID      varchar(32)                    not null,
   MER_ORDER_NO         varchar(64)                    not null,
   UNION_TIME           datetime                       not null,
   PAYOUT_SEQNO         varchar(64)                    not null,
   GMT_CREATE           datetime                       null
);
comment on table TB_PAYOUT_APPLY_UNIQUE is 
'结汇申请防重表';
comment on column TB_PAYOUT_APPLY_UNIQUE.SRC_MERCHANT_ID is 
'交易来源商户号';
create index TB_PAYOUT_UNIQUE_IDX on TB_PAYOUT_APPLY_UNIQUE (
PAYOUT_SEQNO ASC
);

comment on column TB_PAYOUT_APPLY_UNIQUE.MER_ORDER_NO is '外部订单号'; 在 mysql 下是无法直接执行

mysql 的单字段修改, 使用 alter table 方法

ALTER TABLE table_name MODIFY COLUMN column_name TINYINT(tinyint表示column类型) COMMENT '-1:默认值,1:人员id,2:公司id';

这种写法必须要指定 字段类型: TINYINT(tinyint表示column类型) 否则会报错.

那么需要修改 sql 的注释修改.

# 1 列注释修改

  1. 在 Database -> edit Current DBMS... 设置 dbms 的属性,找到 script -> objects -> column -> add

  2. 在原来的内容后面添加 [ comment %.q:COMMENT%]]注意去掉一个]

    添加后的内容为 (可拷贝): %20:COLUMN% %30:DATATYPE%[.Z:[%Compressed%? compressed][ %NULLNOTNULL%][%IDENTITY%?[.O:[ default autoincrement][ identity]]:[%COMPUTE%? compute (%COMPUTE%):[ default %DEFAULT%]]] [%CONSTDEFN%][ comment %.q:COMMENT%]]

  3. 把 script -> column -> ColumnComment 的 Value 清空

# 2 表注释修改

  1. 在 Database -> edit Current DBMS... 设置 dbms 的属性

  2. 找到 script -> objects -> Table -> TableComment: Value 中

    修改后内容为 (可拷贝): alter table [%QUALIFIER%]%TABLE% comment %.60qA:COMMENT%

# 3 去掉主键注释

  1. 在 Databse -> edit Current DBMS... 设置 dbms 的属性,找到 script -> objects -> Pkey -> PKeyComment 清空 Value 值,如需要注释则修改其格式

# 其它修改

  1. 调整导出 sql 的编码格式

    database -> Generate Databse -> Format Encoding: UTF-8 点击确定

# 调整后的 sql

create table TB_OCEAN_PAYOUT_BILL_RELATION 
(
   SRC_MERCHANT_ID      varchar(32)                    not null  comment '交易来源商户号',
   MER_ORDER_NO         varchar(64)                    not null  comment '外部订单号',
   PAYOUT_SEQNO         varchar(64)                    not null  comment '结汇交易流水号',
   OCEAN_PAY_BILL_NO    numeric(16,0)                  null  comment '跨境支付单号',
   DT_CREATE            datetime                       null,
   constraint PK_TB_OCEAN_PAYOUT_BILL_RELATI primary key clustered (SRC_MERCHANT_ID, MER_ORDER_NO)
);
alter table TB_OCEAN_PAYOUT_BILL_RELATION comment '结汇申请支付单关联表';