
# U0400023：GaussDB不支持BINARY特性
#### 描述
**数据库类型与版本**
- 源库类型与版本：MySQL 5.5、5.6、5.7、8.0版本。
- 目标库类型与版本：GaussDB所有版本。
**语法示例**
当SELECT查询语句中使用了BINARY关键字来区分大小写时，将生成此错误提示。
在MySQL中建表的默认字符集与排序规则是utf8mb4与utf8mb4_0900_ai_ci，查询时数据是不区分大小写的，如果需要区分大小写则可以在查询时指定BINARY关键字，此时MySQL会按照二进制方式进行比较，这意味着大小写敏感。如下MySQL示例所示。
```
CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50)
);
INSERT INTO test_table (name) VALUES ('John Doe');
INSERT INTO test_table (name) VALUES ('john doe');
-- 区分大小写查找
SELECT * FROM test_table WHERE BINARY name = 'John Doe';
-- 不区分大小写查找
SELECT * FROM test_table WHERE name = 'John Doe';
```
#### 改造建议
在GaussDB中，默认情况下，查询是大小写敏感的，这与MySQL的BINARY关键字效果一致，但是与MySQL默认行为不一致。
如果需要保持大小写的默认行为与MySQL一致，有如下两种方案：
1、GaussDB 集中式版V2.0-8.0版本开始支持M兼容数据库，大小写的默认行为与MySQL一致；
2、GaussDB 集中式版B兼容模式或者分布式版MYSQL兼容模式的数据库，需要在创建时指定UTF8编码，并设置GUC参数b_format_dev_version = 's1'; b_format_version = '5.7';，此时数据库中大小写的默认行为与MySQL一致。
注意：b_format_dev_version = 's1';时，只有表数据查询的大小写与MySQL保持一致，但是常量字符串匹配还是区分大小写的。GaussDB V2.0-8.100时b_format_dev_version支持s2，此时常量字符串比较也不区分大小写了。更多详情请参考《GaussDB开发者指南》。
UGO不转换BINARY关键字，如上所述，数据库查询是否区分大小写与GaussDB数据库的设置有关，建议您迁移前准备时做好充分的评估与配置。如果仅需要在单条查询上区分大小写，指定一个区分大小写的排序规则即可。例如如下语句等价于MySQL的BINARY特性：
```
SELECT * FROM test_table WHERE name = 'John Doe' COLLATE utf8mb4_bin;
```
图1COLLATE utf8mb4_bin特性效果   
![](https://support.huaweicloud.com/usermanual-ugo/zh-cn_image_0000002081773197.png)
