
# DCL
表1DCL语法兼容介绍 
| 概述                   | 详细语法说明                                                                                                                          | 差异                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|:---|
| SET NAMES指定COLLATE子句 | SET \[ SESSION \| LOCAL \] NAMES {'charset_name' \[COLLATE 'collation_name'\] \| DEFAULT};                                      | GaussDB中SQL_ASCII库下暂不支持指定charset_name与数据库字符集不同。具体请参考《M-Compatibility开发指南》中"SQL参考 \> SQL语法 \> SQL语句 \> S \> SET "章节。 不指定字符集时，MySQL会报错但GaussDB不报错。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| 支持DESCRIBE语句         | {DESCRIBE \| DESC} tbl_name \[col_name \| wild\]    | - 用户权限验证与MySQL存在差异。 - GaussDB中需要拥有指定表所在Schema的USAGE权限，同时还需要拥有指定表的任意表级权限或列级权限，仅显示拥有SELECT、INSERT、UPDATE、REFERENCES和COMMENT权限的列信息。  - MySQL中需要拥有指定表的任意表级权限或列级权限，仅显示拥有SELECT、INSERT、UPDATE、REFERENCES和COMMENT权限的列信息。    - 模糊匹配时涉及到字符串比较操作时，Field字段使用字符集utf8mb4、字符序utf8mb4_general_ci。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| SET设置用户变量            | SET @var_name := expr                                                                                                           | - MySQL用户变量名支持使用转义字符或双重引号转义，GaussDB用户变量名不支持。 单引号括起的变量名，变量名不能出现单引号，如@'''、@''''、@'\\''不支持，解析时匹配不到'或解析报错，如： ``` -- 解析报错 m_db=# SET @'''' = 1; ERROR:  syntax error at or near "@" LINE 1: SET @'''' = 1; -- 解析时匹配不到' m_db=# SET @'\'' = 1; m_db'# ``` 双引号括起的变量名，变量名不能出现双引号，如@"""、@""""、@"\\""不支持，解析时匹配不到"或解析报错，如： ``` -- 解析报错 m_db=# SET @"""" = 1; ERROR:  syntax error at or near "@" LINE 1: SET @"""" = 1; -- 解析时匹配不到" m_db=# SET @"\"" = 1; m_db"# ``` 反引号括起的变量名，变量名不能出现反引号，如@\`\`\`、@\`\`\`\`、@\`\\\`\`不支持，解析时匹配不到\`或解析报错，如： ``` -- 解析报错 m_db=# SET @```` = 1; ERROR:  syntax error at or near "@" LINE 1: SET @```` = 1; -- 解析时匹配不到` m_db=# SET @`\`` = 1; m_db`# ```     - 形如set @var_name1 = @var_name2 := @var_name3 = @var_name4 := expr; 连续赋值，MySQL支持，GaussDB不支持。 ``` m_db=# set @a := @b := @c = @d := 1; ERROR:  user_defined variables cannot be set, such as @var_name := expr is not supported. ```   - expr在GaussDB中可以为聚集函数，在MySQL中不支持。   |
| SET设置系统参数            | SET \[ SESSION \| @@SESSION. \| @@ \| LOCAL \| @@LOCAL.\] {config_parameter { TO \| = } { expr \| DEFAULT } \| FROM CURRENT }}; | - config_parameter为BOOLEAN类型系统参数时： - 参数值直接设置为字符串形式的'1'/'0'、'true'/'false'时，GaussDB数据库设置成功，MySQL设置失败。  - 参数值设置为子查询的查询结果，当查询结果为'true'/'false'、非整数类型1/0时，GaussDB数据库设置成功，MySQL设置失败；当查询结果为NULL时，GaussDB数据库设置失败，MySQL设置成功。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| USE切换当前模式            | USE schema_name                                                                                                                 | 使用USE语句指定模式，当用户没有对应模式的USAGE权限时，MySQL产生报错，GaussDB会将当前模式指定为空。 ``` -- MySQL mysql> USE test; ERROR 1044 (42000): Access denied for user 'u1'@'%' to database 'test' -- GaussDB m_db=> USE test; SET m_db=> SELECT database(); ERROR:  function returned NULL CONTEXT:  referenced column: database ```                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   
