达梦数据库 BACKSLASH_ESCAPE 参数维护记录
问题现象
系统从 MySQL 迁移到达梦后,JSON 字符串中的 \ 未自动转义,导致保存内容异常。
例如:
INSERT INTO t1 VALUES(‘{\”a\”:1}’);
MySQL 实际保存:
{“a”:1}
达梦默认保存:
{\”a\”:1}
导致程序 JSON 解析异常。
原因
达梦默认:
|
1 |
BACKSLASH_ESCAPE = 0 |
即:
\ 不作为转义字符
与 MySQL 默认行为不一致
处理方案
开启达梦反斜杠转义功能。
临时修改(立即生效)
查看参数:
|
1 |
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME='BACKSLASH_ESCAPE'; |
修改参数:
|
1 |
SP_SET_PARA_VALUE(2, 'BACKSLASH_ESCAPE', 1); |
参数说明:
| 参数值 | 含义 |
| 0 | 默认,不转义 \ |
| 1 | 开启 MySQL 风格转义 |
永久生效(重要)
需同步修改 dm.ini。
dm.ini 位置
常见位置:
|
1 |
/data/DAMENG/dm.ini |
或:
|
1 |
/data/dmdbms/data/DAMENG/dm.ini<code dir="ltr"></code><code dir="ltr"> |
修改内容
找到:
|
1 |
BACKSLASH_ESCAPE = 0 |
修改为:
|
1 |
BACKSLASH_ESCAPE = 1 |
同时确认:
|
1 2 |
#Server compatible mode, 0:none, 1:SQL92, 2:Oracle, 3:MS SQL Server, 4:MySQL, 5:DM6, 6:Teradata, 7:PG, 8:DB2 COMPATIBLE_MODE = 4 |
表示 MySQL 兼容模式。
生效方式
修改 dm.ini 后:
必须重启达梦数据库。
例如:
|
1 |
DmServiceDMSERVER restart |
或者
|
1 |
systemctl restart DmServiceDMSERVER |
按实际服务名为准。
当前标准配置
|
1 2 |
COMPATIBLE_MODE = 4 BACKSLASH_ESCAPE = 1 |
注意事项
开启后:
|
1 2 3 4 |
\t \n \\ \" |
会按 MySQL 转义规则解析。
可能影响:
- Windows 文件路径
- 正则表达式
- 特殊字符串
例如:
|
1 |
c:\temp |
可能被解析为:
|
1 |
c: emp |
因此涉及路径时建议:
|
1 |
c:\\temp |