开发者社区> 问答> 正文

如何保证数据库字符编码正确

在数据库中字符集是在数据库设计的过程中需要详细考虑的一点,用户需要根据您的业务场景、用户数据等方面来考虑。
在数据库中设置字符集的参数请查看下图:

这些参数是通过如下命令来查找的: show variables like '%character%'

在下面的各参数必须需要保证除了character_set_filesystem外的所有的参数都保持统一才可以保证字符编码不会出现乱码的情况。
character_set_client、character_set_connection以及character_set_results这几个参数都是客户端的设置
character_set_system、character_set_server以及character_set_database是指服务器端的设置。
而对于这三个服务器端的参数来说的优先级是character_set_database>character_set_server>character_set_system的。另外列的字符编码在服务器端是具有最高优先级的。

那如何能够保证我们的这些字段是一致的?
首先对于客户端字符集来说可以通过如下方式来定义对应的character_set_client、character_set_connection以及character_set_results这几个参数。例如: set names utf8

而对于服务器端的设置则有不同的层次,首先对于character_set_system暂时不提供更改,但是由于其优先级最低因此影响不大。
接下来character_set_server您可以在控制台上的参数设置里面的character_set_server参数来设置,详细界面请参考下图:

而对于character_set_database则是则是在数据库创建的时候指定的,请参考:

对于MySQL可以通过如下的方式来调整: ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

SQL Server的字符集暂时不支持修改,最高优先级的列的字符集也可以通过如下方式来更改: ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

在做到上述的设置之后基本上可以保证字符编码不会出现乱码,对于在代码中设置客户端的字符编码的时候建议也可以通过set names XXX来修改客户端的设置,然后再进行相关的操作。

展开
收起
云栖大讲堂 2017-11-03 15:06:13 2625 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
阿里云数据库运维实战手册 立即下载
传统数据库上云最佳实践-友邦保险 立即下载
数据库游戏行业最佳实践 立即下载