字符集是一个在使用数据库过程中经常碰到的问题,然后很多同学对这块的使用其实不是很了解,所以会经常出现在使用过程中乱码的情况,今天我们来具体讲讲字符集相关问题,从容应对乱码问题。
首先我们得先登录云数据库 RDS 实例看看当前字符集的设置是怎么样的,当你通过远程连接到数据库实例之后,通过命令选择你需要使用的库,命令如下:
use <库名>
show variables like '%character%'
variable_name | value |
---|---|
character_set_client | utf8 |
character_set_connection | utf8 |
character_set_database | utf8 |
character_set_filesystem | binary |
character_set_results | utf8 |
character_set_server | utf8 |
character_set_system | utf8 |
此参数是客户端可以设置的,具体设置方式见下文详解。
此参数是客户端可以设置的,具体设置方式见下文详解。
此参数值与你创建库的时候指定的字符集有关,关于创建库的时候如何指定字符集,可以参考创建库
此参数可以不用关心
此参数是客户端可以设置的,具体设置方式见下文详解。
此参数是服务端的设置,此参数值可以通过参数组进行修改,可以参考 修改参数;注意:此参数修改完后,记得重启实例才能确保 character_set_database
默认值与 character_set_server
保持同步。
此参数可以不用关心
上面提到了character_set_client
、character_set_connection
、character_set_results
这三个参数值是会话级别的,可以通过客户端进行设置的,当你连接上云数据库 RDS 实例后,执行以下 SQL 指令:
set names <字符集编码>;
注意:因为是会话级别的,所以当你重连数据库实例之后,原先的字符集设置会失效,需要重新执行下 set names
命令进行设置。
要避免在使用数据库过程中的乱码问题,需要确保character_set_client
、character_set_connection
、character_set_results
、character_set_database
这四个参数值是保持一致的,如果不一致就会有可能出现乱码。
如果要在云数据库 RDS 实例中存储 emoji 表情,请确保character_set_client
、character_set_connection
、character_set_results
、character_set_database
这四个参数组值都是 utf8mb4。
通过客户端设置字符集的 c++ 示例代码如下, 仅供参考
string sql = "set names utf8mb4"; mysql_query(connection, sql.c_str());