
# GaussDB M兼容模式
当使用MySQL的M兼容模式，可以设置GUC参数提高GaussDB的兼容性，迁移涉及的GUC参数和影响范围可参见[表1]。
![](https://support.huaweicloud.com/usermanual-ugo/public_sys-resources/caution_3.0-zh-cn.png)
GaussDB数据库提供了许多运行参数，配置这些参数可以影响数据库系统的行为。在修改这些参数时请确保用户理解了这些参数对数据库的影响，否则可能会导致无法预料的结果。
 表1GaussDB（M兼容模式）的GUC参数 
| 兼容M行为配置项（仅限集中式）                  | 兼容性配置项                                                                              | 兼容性配置项名字                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 支持的数据库                             | 是否建议打开 |
|:---|:---|:---|:---|:---|
| m_format_behavior_compat_options | enable_escape_string                                                                | 转义符控制开关。 不设置此配置项时，转义符行为受GaussDB转义符相关的GUC参数standard_conforming_strings、escape_string_warning和backslash_quote控制。 设置此配置项时，默认支持除'\\0'外的所有MySQL转义符，且gsql客户端中'\\b', '\\r'和'\\Z'回显行为会发生改变，与MySQL客户端保持一致。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | GaussDB V2.0-8.200 集中式开始的版本        | 是      |
| m_format_behavior_compat_options | enable_conflict_funcs                                                               | 冲突函数控制开关。 不设置此配置项时，ceil、format、instr、position、row_number、rank、dense_rank、regexp_instr、regexp_like、regexp_replace及regexp_substr函数保持GaussDB原生系统函数行为。 设置此配置项，且参数m_format_dev_version值为's2'或以上版本时，ceil、format、instr、position、row_number、rank及dense_rank函数为M-Compatibility兼容模式数据库实现行为。使用regexp_instr、regexp_like、regexp_replace及regexp_substr函数时会报错，提示M-Compatibility兼容模式数据库不支持。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |  GaussDB V2.0-8.200 集中式开始的版本 | 是      |
| m_format_behavior_compat_options | select_column_name                                                                  | 列名回显控制开关。目前只有M兼容模式下支持，在B模式下是不支持的。需要设置m_format_behavior_compat_options ='select_column_name'，特性开关为用户级，缺省关闭。 不设置此配置项时： SELECT 系统函数：回显为系统函数名。 SELECT 表达式：回显为?column?。 SELECT 布尔值：回显为bool。 设置此配置项时，列名回显为全部的函数或表达式输入。 仅支持集中式，使用商用客户端测试。 如果显示的列名字符串中含有转义字符，只有在设置了m_format_behavior_compat_options ='enable_escape_string';后才会显示转义后的字符，否则会显示转义字符本身。比如SELECT"abc\\tdef";M兼容在未开启上述设置时显示为abc\\tdef。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |  GaussDB V2.0-8.200 集中式开始的版本 | 是      |
| m_format_behavior_compat_options | enable_precision_decimal                                                            | 支持数据类型精度。 不设置此配置项时： CREATE TABLE SELECT语句只支持SELECT表的列，不支持表达式、函数、常量，以及union场景（因为涉及结果类型推导）。 设置此配置项时： CREATE TABLE SELECT语句不受限制上面描述的场景限制。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | GaussDB V2.0-8.200 集中式开始的版本        | 是      |
| m_format_behavior_compat_options | forbid_none_space_comment                                                           | 支持"-- "单行注释语法。 不设置此配置项时：--后的内容（--后无论是否添加空格，--后的全部内容）全部被视为单行注释内容。 设置此配置项时：仅-- 后的内容（--后添加空格，空格之后的内容）将被视为单行注释内容。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | GaussDB V2.0-9.0 集中式/分布式           | 是      |
| m_format_behavior_compat_options | cast_as_new_json                                                                    | 支持JSON类型执行::JSON转换时转换为M-Compatibility模式数据库的JSON类型。 不设置此配置项时：执行::JSON、CREATE TABLE \<tablename\> AS \<包含JSON类型的SELECT查询\>; 等涉及使用::JSON方式进行JSON类型转换的场景，实际转换为非M-Compatibility模式数据库（即GaussDB原有）的JSON类型。 设置此配置项时：执行::JSON、CREATE TABLE \<tablename\> AS \<包含JSON类型的SELECT查询\>; 等涉及使用::JSON方式进行JSON类型转换的场景，实际转换为M-Compatibility模式数据库JSON类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | GaussDB V2.0-9.0 集中式               | 是      |
| m_format_behavior_compat_options | grant_database_nomapping     | M-Compatibility模式数据库下grant\|revoke on database语法行为配置项。 不设置此配置项时：GRANT \| REVOKE ON DATABASE语法映射成GRANT \| REVOKE ON SCHEMA行为，赋予或回收指定的用户或角色对模式层级对象的访问权限。 设置此配置项时：GRANT \| REVOKE ON DATABASE语法保留GaussDB数据库默认兼容性库中GRANT \| REVOKE ON DATABASE语法的行为，赋予或回收指定的用户或角色对数据库层级对象的访问权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | GaussDB V2.0-9.0 集中式/分布式           | 是      |
| m_format_behavior_compat_options | disable_illegal_function_syntax  | 用于控制系统函数中不合法的语法功能。 不设置此项时，以下场景的系统函数语法功能正常可用。 无入参的系统函数支持参数为(\*)的调用。 普通系统函数支持结合WITHIN GROUP使用。 普通系统函数入参支持结合ORDER BY使用。 普通系统函数支持结合OVER子句使用。 聚合函数支持结合WITHIN GROUP使用。 设置此项时，上述场景将被禁用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | GaussDB V2.0-9.0 集中式               | 是      |
| m_format_dev_version             | S1                                                                                  | 影响如下语法： 禁用SELECT FETCH FIRST ROWS ONLY语法。 禁用TRUNCATE CASCADE/RESTRICT语法。 禁用CREATE TABLE中定义主键时指定USING INDEX TABLESPACE tablespace_name语法。 DROP TABLE/VIEW/COLUMN中CASCADE/RESTRICT语法语义改变，改为忽略CASCADE/RESTRICT的语义，且默认行为为RESTRICT。 CREATE TABLE REFERENCES作为列约束时，语法语义改变，改为忽略该外键定义。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | GaussDB V2.0-8.100 集中式/分布式         | 是      |
| m_format_dev_version             | s2                                                                                  | 影响如下操作符： ::操作符的转换规则变更为默认隐式转换规则。 影响如下视图： information_schema.statistics视图内INDEX_NAME字段在主键场景由显示primary改为显示PRIMARY；COLUMN_NAME和SUB_PART字段补充了前缀索引场景的支持；临时表索引由显示改为不显示;系统列的索引由部分场景可能会显示改为不显示。 information_schema.global_variables视图内数据由显示pg_settings表里面所有数据缩小为pg_settings表里context字段是"internal"、"postmaster"、"backend"、"sighup"数据。 information_schema.columns视图内COLUMN_KEY字段补充了前缀索引场景的支持。 information_schema.table_constraints视图内CONSTRAINT_NAME字段在主键约束场景由显示约束名改为显示PRIMARY。 information_schema.character_sets视图可以查询所有可用字符集信息。 information_schema.collations视图可以查询所有可用字符排序规则信息。 information_schema.collation_character_set_applicability视图可以查询所有可用排序规则和字符集的对应关系。 information_schema.character_sets、information_schema.collations、information_schema.collation_character_set_applicability视图中的CHARACTER_SET_NAME改成小写，查询显示根据字符序细分utf8mb4和utf8。 影响如下语法： 以下事务语法语义改变，改为设置下一个事务特性： set @@transaction_isolation = value set @@transaction_read_only = value set transaction isolation level set transaction {read write \| read only} set transaction 语法语义改变，改为设置会话级事务特性： set \[local\|session\|@@session.\] transaction_isolation = value set \[local\|session\|@@session.\] transaction_read_only = value show transaction_isolation显示为带中划线的隔离级别。 创建生成列不指定STORED和VIRTUAL关键字，默认创建虚拟生成列。 SHOW CREATE TABLE语法返回结果集变更，包括： 列/表注释位置变更，从以COMMENT ON语句形式返回改为在CREATE TABLE语句以COMMENT子句形式中返回； 主键与唯一约束位置变更，从以ALTER TABLE ADD CONSTRAINT语句形式返回改为在CREATE TABLE语句以CONSTRAINT子句形式作为表约束中返回； 主键与唯一约束中的USING INDEX TABLESPACE选项不再显示，该选项在设置兼容版本控制开关为s1后被禁用； 索引注释位置变更，从以COMMENT ON语句形式返回改为在CREATE INDEX语句以COMMENT子句形式返回； 全局临时表ON COMMIT选项位置变更，从以CREATE TABLE语句WITH子句中on_commit_delete_rows参数形式返回改为在CREATE TABLE语句以ON COMMIT子句形式返回。 SHOW CHARACTER SET语法查询使用视图information_schema.character_sets，查询结果随该视图内容的变化而变化。 SHOW COLLATION语法查询使用视图information_schema.collations，查询结果随该视图内容的变化而变化。 UPDATE语法中： 如果table_name指定了别名，则只能通过别名引用此表。 仅在单表场景多个字段下，各字段的表达式计算会按从左到右的顺序；如果有引用前面的字段名，则使用其更新后的数据，且同一字段名可被修改多次。 INSERT ... ON DUPLICATE KEY UPDATE语法中：ON DUPLICATE KEY UPDATE子句更新多列时，如果有引用前面的字段名，则使用其更新后的数据，且同一字段名可被修改多次。 影响以下GUC参数： 增加transaction_isolation的参数范围。 影响如下功能： 删除生成列的基列需要先删除对应的生成列。 存储生成列的基列不支持指定SET NULL、SET DEFAULT、CASCADE关键字关联 ON UPDATE和ON DELETE动作。 ALTER TABLE修改表涉及存储生成列时，生成列的CHECK约束检查生效。 | GaussDB V2.0-8.200 集中式开始           | 是      |
   
![](https://support.huaweicloud.com/usermanual-ugo/public_sys-resources/note_3.0-zh-cn.png)
m_format_dev_version参数设置：
- GaussDB V2.0-8.100 企业版，设置为 s1。
- GaussDB V2.0-8.200 企业版和 GaussDB V2.0-9.0 企业版，设置为 s2。
 
#### 操作步骤
**集中式版**
1. 连接上GaussDB数据库，切换至GaussDB的安装用户下。 
   **su - omm**
   ![](https://support.huaweicloud.com/usermanual-ugo/public_sys-resources/note_3.0-zh-cn.png)
   "omm"为示例用户，切换时以实际安装用户为准。
   
   
2. 执行以下命令，设置参数。 
   gs_guc reload -Z coordinator -Z datanode -N all -I all -c "m_format_behavior_compat_options='enable_escape_string,enable_conflict_funcs,select_column_name,enable_precision_decimal'"; ----GaussDB V2.0-8.200 集中式开始的版本
   gs_guc reload -Z coordinator -Z datanode -N all -I all -c "m_format_behavior_compat_options='enable_escape_string,enable_conflict_funcs,select_column_name,enable_precision_decimal,forbid_none_space_comment,enable_load_data_remote_transmission,cast_as_new_json,grant_database_nomapping,disable_illegal_function_syntax'"; ----GaussDB V2.0-9.0 集中式开始的版本
   gs_guc reload -Z coordinator -Z datanode -N all -I all -c "m_format_dev_version='s2'"; --GaussDB V2.0-8.100 版本使用S1,GaussDB V2.0-8.200 到 GaussDB V2.0-10.0 版本使用S2
   
   
 
