在PolarDB我们用户表账号使用 utf8mb4_0900_as_cs 区分大小写,建表提示不支持,怎么处理?ERR-CODE: [PXC-4700][ERR_SERVER] server error by the column username with character set utf8mb4 collate utf8mb4_0900_ascs is unsupported 
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的错误信息 ERR-CODE: [PXC-4700][ERR_SERVER] server error by the column username with character set utf8mb4 collate utf8mb4_0900_ascs is unsupported
,可以判断问题的核心在于 PolarDB 不支持 utf8mb4_0900_as_cs
排序规则。该排序规则的特点是区分大小写(as
表示口音敏感,cs
表示区分大小写),但 PolarDB 当前版本可能未完全支持此排序规则。
以下是详细的解决方案和操作步骤:
PolarDB 默认支持的排序规则包括 utf8mb4_general_ci
和 utf8mb4_0900_ai_ci
等。其中: - utf8mb4_general_ci
:不区分大小写,性能较高。 - utf8mb4_0900_ai_ci
:基于 Unicode 规则,准确度高,但性能稍低。
如果您的业务需要区分大小写,建议使用 utf8mb4_bin
排序规则,它是二进制排序规则,严格区分大小写且性能较好。
在建表时,将列的排序规则从 utf8mb4_0900_as_cs
修改为 utf8mb4_bin
或其他支持的排序规则。例如:
CREATE TABLE user_account (
username VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
PRIMARY KEY (username)
);
上述语句中,COLLATE utf8mb4_bin
确保了列 username
的值严格区分大小写。
如果您已经存在数据表并希望修改排序规则,可以通过以下步骤完成: 1. 备份数据:在修改表结构之前,确保对现有数据进行完整备份。 2. 修改列的排序规则:
ALTER TABLE user_account MODIFY username VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
此操作会将列 username
的排序规则更改为 utf8mb4_bin
。
执行以下查询,验证排序规则是否生效:
SHOW FULL COLUMNS FROM user_account;
输出结果中,Collation
列应显示为 utf8mb4_bin
。
如果您的业务逻辑依赖于特定的排序规则(如 utf8mb4_0900_as_cs
),需要评估是否可以通过其他方式实现相同的功能。例如: - 使用应用程序层进行大小写敏感的校验。 - 在查询时显式指定排序规则,例如:
SELECT * FROM user_account WHERE username = 'TestUser' COLLATE utf8mb4_bin;
utf8mb4_bin
的性能通常优于 utf8mb4_0900_as_cs
,但在大规模数据场景下仍需测试其对查询性能的影响。utf8mb4_0900_as_cs
,建议联系阿里云技术支持,确认是否有计划支持该排序规则。通过将排序规则从 utf8mb4_0900_as_cs
修改为 utf8mb4_bin
,可以解决当前建表失败的问题。同时,建议在业务逻辑中评估大小写敏感的需求,并选择合适的排序规则以平衡功能与性能。
PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,100%兼容MySQL。 2021年开源,开源历程及更多信息访问:OpenPolarDB.com/about