如果我更改 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 列的编码不会修改此默认编码。因此:无事可做。
我有一组 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 列的编码不会修改此默认编码。因此:无事可做。