自学内容网 自学内容网

mysql迁移到达梦的修改点

  • 字段是达梦关键字的,达梦会给转成大写,如果不要转则需要使用双引号引起来。关键字参考:D:\dmdbms\doc\DM8_SQL语言使用手册.pdf
    • 例如:RowCount Level Content Password Locked
  • 中文乱码问题,需要在应用程序所在服务器的/etc/dm_svc.conf文件中添加CHAR_CODE=(PG_UTF8)。参考:参考
  • 时区问题,需要在应用程序所在服务器的/etc/dm_svc.conf文件中添加TIME_ZONE=(480)。参考:参考
  • 双引号的问题。mysql中双引号作为字符串使用的情况,要改成单引号。
  • GROUP_CONCAT
GROUP_CONCAT(字段 Separator ',') AS 字段别名
-- 改成
WM_CONCAT(字段) AS 字段别名
-- 如果需要加上排序
WM_CONCAT(字段) over (order by 排序字段) AS 字段别名
  • COUNT 不能用bool作为参数。例如:count(true) 需要改成 count(1)
  • JSON json函数参考
    • ->>操作符要改成JSON_VALUE。例如: a->>'$.b'  改成  JSON_VALUE(a, '$.b')
    • 在path中不能有转义符,例如JSON_VALUE(a, '$.\"b\"')中的转义符得去掉
  • date函数(date_sub, date_add, adddate)
DATE_ADD(NOW(), INTERVAL 1 SECOND)
-- 要改成
DATEADD(second, 1, now())

DATEDIFF(ExpireTime, NOW())
-- 要改成
DATEDIFF(D, ExpireTime, NOW())

date(ExpireTime)
-- 要改成
DATE_FORMAT(ExpireTime, 'yyyy-mm-dd')
  • replace into 或 on duplicate key update 或 insert ignore into
REPLACE INTO user(id, name) VALUES(1, 'test');
-- 或 
REPLACE INTO user(id, name) VALUES(1, 'test') ON DUPLICATE KEY UPDATE name = 'test';
-- 要改成
MERGE INTO user u
  USING (select 1 id, 'test' name) t
    ON (t.id= u.id)
WHEN NOT MATCHED THEN
  INSERT (id, name) VALUES (t.id, t.name)
WHEN MATCHED THEN
  UPDATE SET u.name = t.name;
  • mysql查出来的字段类型都是string,但是达梦会根据数据表类型返回。比如b字段是int类型 SELECT b from a; mysql查出来的string,但是达梦是integer
  • 达梦having不能用已经计算好的字段,不然会报“-4083: 引用列未找到”。例如执行如下sql,mysql可以正常执行,达梦中必须得用having count(*) > 1
select name, count(*) c from user group by name having c > 1;

  • 如果需要给自增列手动赋值,需要在执行插入前执行SET IDENTITY_INSERT 表名 ON;
  • signed、unsigned关键字不能用。signed对应integer,但是unsigned对应啥呢???
select convert(1, signed) 要改成 select convert(integer, 1)
select cast(1 as signed)  要改成 select cast(1 as integer)

  • mysql的修饰符(`)在达梦能用?可能区分不同达梦版本。

ps:达梦客户端在执行增删改语句时,可以设置查询自动提交


原文地址:https://blog.csdn.net/niezuxue/article/details/142916703

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!