
# GaussDB MySQL兼容模式
#### **兼容模式设置**
1. GaussDB MySQL语法兼容模式包括：集中式版B兼容模式、集中式版M兼容模式以及分布式版MYSQL兼容模式。
2. 目标库为GaussDB，且源库为MySQL/GoldenDB数据库迁移时，默认往GaussDB MySQL语法兼容模式迁移，因此建议创建MySQL语法兼容数据库。
3. 创建MySQL语法兼容类型数据库。

1. 使用具有创建数据库权限的用户登录GaussDB数据库。
2. 执行以下命令，创建MySQL兼容模式的GaussDB数据库。 
   集中式版B兼容：
   **create database *databasename*dbcompatibility = 'B'** **;**
   集中式版M兼容：
   **create database *databasename*dbcompatibility = 'M'** **;**
   分布式：
   **create database *databasename*dbcompatibility = 'MYSQL'** **;**
   
   
3. 执行以下命令，查看是否创建成功。 
   **select \* from pg_database where datname = '*databasename*'** **;**
   - 集中式版B兼容：若datcompatibility兼容性一列为B，则MySQL兼容数据库创建成功。
   
   - 集中式版M兼容：若datcompatibility兼容性一列为M，则M兼容数据库创建成功。
   
   - 分布式：若datcompatibility兼容性一列为MySQL，则MySQL兼容数据库创建成功。
   
   
   
   
 
#### **GUC参数设置**
当使用MySQL兼容模式，可以设置GUC参数提高GaussDB的兼容性，迁移涉及的GUC参数和影响范围可参见[表1]。
![](https://support.huaweicloud.com/usermanual-ugo/public_sys-resources/caution_3.0-zh-cn.png)
GaussDB数据库提供了许多运行参数，配置这些参数可以影响数据库系统的行为。在修改这些参数时请确保用户理解了这些参数对数据库的影响，否则可能会导致无法预料的结果。
 表1GaussDB（MySQL兼容模式）的GUC参数 
| 兼容B行为配置项                                                                                      | 兼容性配置项                  | 兼容性配置项名字                                                                                                                                                                                                                                       | 支持的数据库                                                    | 是否建议打开 |
|:---|:---|:---|:---|:---|
| b_format_behavior_compat_options     | enable_set_variables    | 仅限集中式版会话变量生效。                                                                                                                                                                                                                                  | 集中式版                                                      | 是      |
| b_format_behavior_compat_options     | set_session_transaction | set session transaction控制开关。 不设置此配置时，set session transaction等效于set local transaction。 设置此配置时，支持B兼容模式下使用上述语法，修改当前会话事务特性。                                                     | 集中式版                                                      | 是      |
| b_format_behavior_compat_options     | enable_modify_column    | ALTER TABLE MODIFY语义控制开关。 不设置此配置时，"ALTER TABLE table_name MODIFY column_name data_type;"只修改列的数据类型。 设置此配置时，"ALTER TABLE table_name MODIFY column_name data_type;"修改整个列定义。 | 集中式版                                                      | 是      |
| b_format_behavior_compat_options     | default_collation       | 默认字符序前向兼容开关。 若不设置此配置项，在未显式指定字符类型字段的字符集或字符序且表级字符序也为空时，字段为default字符序。 若设置此配置项，当表级字符序不为空时，字符类型字段的字符序继承表级字符序，当表级字符序为空时，字符类型字段的字符序设置为数据库编码对应的默认字符序。                            | 集中式版/分布式版                                                 | 是      |
| b_format_behavior_compat_options     | all                     | 打开所有语法控制开关。 all不能同时和其他配置项一起指定。表格中除all外所有配置项逗号隔开的含义和取值为all含义相同。                                                                                                                                               | 集中式版/分布式版                                                 | 是      |
| b_format_version                                                                              | 5.7                     | 数据库平台兼容性行为配置项。                                                                                                                                                                                                                                 | GaussDB V2.0-8.0 集中式版/分布式版                                | 是      |
| b_format_dev_version                                | S1                      | 数据库平台迭代小版本兼容性行为配置项。                                                                                                                                                                                                                            | GaussDB V2.0-8.0 集中式版/分布式版                                | 是      |
| b_format_dev_version                                | S2                      | 数据库平台迭代小版本兼容性行为配置项。                                                                                                                                                                                                                            | GaussDB V2.0-8.100 集中式版/分布式版、GaussDB V2.0-8.200 集中式版/分布式版 | 是      |
   
![](https://support.huaweicloud.com/usermanual-ugo/public_sys-resources/note_3.0-zh-cn.png)
b_format_dev_version参数设置：
- GaussDB V2.0-8.0企业版，设置为s1。
- GaussDB V2.0-8.100企业版和GaussDB V2.0-8.200企业版，设置为s2。
 
- S1兼容性配置项所影响的内容：
  - NEW()函数、last_day()函数、date_sub(date, INTERVAL expr unit)、datediff(expr1, expr2)、day()/dayofmonth()、dayname()
  
  - dayofweek()、dayofyear()、extract(unit FROM date)、from_days(days)、from_unixtime(unix_timestamp\[,format\])、get_format({DATE \| TIME \| DATETIME \| TIMESTAMP}, {'EUR' \| 'USA' \| 'JIS' \| 'ISO' \| 'INTERNAL'})、 hour()、makedate(year,dayofyear)、microsecond()、minute()、month()、monthname()、 period_add(period, month_number)
  
  - TIMESTAMPDIFF、yearweek(date\[, mode\])、year()、weekofyear(date)、 weekday()、week(date\[, mode\])、utc_timestamp()、utc_time()、period_diff(p1,p2)、second().
  
  - quarter()、str_to_date(str, format)、subdate(expr, days)、time_format(time, format)、ifnull(expr1, expr2)、database()、current_date、current_time、current_timestamp
  
  - round(arg1, arg2)、localtime(\[precision\])、localtimestamp、dbtimezone、timenow()、numtodsinterval(num, interval_unit)、numtoyminterval(num, interval_unit)
  
  - new_time(date, timezone1,timezone2)、sysdate(\[precision\])、add_months(d,n)、months_between(d1, d2)、convert_tz(dt, from_tz, to_tz)
  
  - adddate(date, INTERVAL expr unit)、date_format(date, format)
   

- S2兼容性配置项所影响的内容：
  - 包含s1控制的兼容性行为。
  
  - 影响如下功能：
    - AUTO_INCREMENT自动增长列在导入数据或者进行BATCH INSERT执行计划的插入操作时，对于混合0、NULL和确定值的场景，确定值插入时会立即更新自增计数，后续的0/NULL将在确定值的基础上自增。
    
    - like操作符对于匹配串末尾是转义符的场景不再报错。
    
    - 字符集、字符序的排序规则优先级将发生变更。
     
  
  - 影响如下语法：
    - CREATE TABLE table_name LIKE source_table语法。
    
    - CREATE TABLE table_name LIKE source_table和"CREATE TABLE table_name (LIKE source_table)"语法不支持指定INCLUDING和EXCLUDING选项，缺省等同于指定INCLUDING ALL。
    
    - 支持LOAD DATA语法，gs_loader中部分与LOAD DATA语法一致的语法功能会发生变化。
    
    - 支持set names指定collate子句。
    
    - 涉及ALTER TABLE，RENAME TABLE等更改表名的语法，影响场景如：新表名对应字符串开头为"#MySQL50#"，且其后有其他字符，"#MySQL50#"将被忽略。
     
   
 
#### 操作步骤
**集中式版**
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 "b_format_behavior_compat_options='ALL'";**
   **gs_guc reload -Z coordinator -Z datanode -N all -I all -c "b_format_version='5.7'";**
   **gs_guc reload -Z coordinator -Z datanode -N all -I all -c "b_format_dev_version='s2'";**
   
   
**分布式版**
1. 连接上GaussDB数据库，切换至GaussDB的安装用户下。 
   **su - omm**
   ![](https://support.huaweicloud.com/usermanual-ugo/public_sys-resources/note_3.0-zh-cn.png)
   "omm"为示例用户，切换时以实际安装用户为准。
   
   
2. 执行以下命令，设置参数。
3. **gs_guc reload -Z coordinator -Z datanode -N all -I all -c "b_format_behavior_compat_options='ALL'";**
   
   **gs_guc reload -Z coordinator -Z datanode -N all -I all -c "b_format_version='5.7'";**
   **gs_guc reload -Z coordinator -Z datanode -N all -I all -c "b_format_dev_version='s2'";**
   
   
 
