【问题标题】:If I change the character set of a MySQL database, do I need to modify Ruby clients?如果我更改 MySQL 数据库的字符集,是否需要修改 Ruby 客户端?
【发布时间】:2015-05-18 23:27:10
【问题描述】:

我有一组可以访问我的 MySQL 数据库的 ruby​​ 脚本。我需要修改此数据库的字符集,特别是将表从 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 字符集?

【问题讨论】:

  • 你使用哪个库/gem来连接mysql?
  • 您是否验证过您的表中的数据是 utf8 编码的? SELECT HEX(...)。我的观点是,如果你的表中有垃圾,修复 Ruby 只是你痛苦的一部分。

标签: mysql ruby utf-8


【解决方案1】:

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

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

【讨论】:

  • 列的编码也很重要 - 例如,如果来自客户端的 UTF8 数据包含无法转换为列使用的编码的数据
  • 嗯,是的,它决定了可以存储哪些字符以及存储效率如何。不过,对于客户端编码而言,这并不重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多