如果我更改 MySQL 数据库的字符集,是否需要修改 Ruby 客户端?

If I change the character set of a MySQL database, do I need to modify Ruby clients?

我有一组 ruby 脚本可以访问我的 MySQL 数据库。我需要修改此数据库的字符集,特别是将表从 Latin1 更改为 UTF8。我是否需要修改我的脚本?我查看了一下,我发现我可以为连接设置字符集,这是强制性的吗?

我认为我不需要做任何调整的部分犹豫是数据库今天的设置。查看字符集的设置方式:

mysql> SHOW VARIABLES LIKE "%char%"; +--------------------------+-------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /rdsdbbin/mysql-5.6.21.R1/share/charsets/ | +--------------------------+-------------------------------------------+

这是否表明客户端已经设置为使用 UTF8 字符集?

MySQL 管理每个客户端和每个列的编码。这意味着,存储文本的每一列都有一个编码设置,每个连接的客户端也分别有一个编码设置。文本编码将根据需要在这两者之间即时转换。如果客户端发送要存储在 SJIS 列中的 UTF-8 数据,MySQL 将自动进行该转换(反之亦然)。

因此,只有在连接到数据库时客户端指定的编码才是真正重要的。如果您没有在 Ruby 代码中明确指定,您将获得隐式默认设置。更改 MySQL 列的编码不会修改此默认编码。因此:无事可做。