问题描述

云数据库 RDS SQL Server 版执行查询操作时系统报错,显示类似如下。

字符集不匹配

 

问题原因

由于表数据列的字符集不同,导致查询失败。

 

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

可以修改表的字符集保持一致,或者查询时指定字符集。

 

修改表的字符集

云数据库 RDS SQL Server 版不支持修改数据库级别字符集,只支持修改基于数据库表级列的字符集。修改SQL语句如下。
注:该版本支持的字符集如下,其中后缀‘_CI’指不区分大小写,‘_CS’指区分大小写,‘_BIN’指按二进制排序并区分大小写。
  • Chinese_PRC_CI_AS
  • Chinese_PRC_CS_AS
  • SQL_Latin1_General_CP1_CI_AS
  • SQL_Latin1_General_CP1_CS_AS
  • Chinese_PRC_BIN
alter table [$Table_Name] alter column [$Column] [$Column_Number] collate [$AS];

注:

  • [$Table_Name]指表名。
  • [$Column]指列名。
  • [$Column_Number]指列的数据类型。
  • [$AS]指需要设定的字符集。

 

指定字符集查询

执行如下SQL语句,直接指定字符集进行查询。

select * from [$Table_Name1] a ,[$Table_Name2] b where a.[$Column]=b.[$Column] collate [$AS];
 

适用于

  • 云数据库 RDS SQL Server 版

 

如果您的问题仍未解决,您可以在阿里云社区提交工单联系阿里云技术支持。