mysql2 gem 0.3.15给出ASCII-8BIT,编码设置为“utf8”

我使用MySQL 5.1.71和Rails 4.0.4在Ruby 2.0.0-p353上运行(通过rbenv + ruby​​-build),使用mysql2 gem 0.3.15。 CentOS 6.5。

在database.yml中,编码设置为“utf8”,适配器为“mysql2”,适用于所有环境。

我的表都使用UTF-8,“DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci”。

在Ruby中, Encoding::default_internal == Encoding::default_external == Encoding::UTF_8

关于ActiveRecord为什么还给我ASCII-8BIT字符串的原因,我还能看到其他任何想法? 我在Mac上开发了UTF-8,但在Linux上生产的是ASCII-8BIT。

当我启动一个控制台并直接使用mysql2时,我得到了ASCII,所以这似乎是问题所在。

 mysql> SHOW VARIABLES LIKE 'character_set%'; +--------------------------+----------------------------+ | 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_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) mysql> SHOW VARIABLES LIKE 'collation%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_unicode_ci | | collation_server | utf8_unicode_ci | +----------------------+-----------------+ 3 rows in set (0.00 sec) 

SHOW CREATE TABLE产品:

 CREATE TABLE `product` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varbinary(255) DEFAULT NULL, `price` decimal(12,2) DEFAULT NULL, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, `category` varbinary(255) DEFAULT NULL, `quantity` int(11) NOT NULL, `package_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `index_product_on_package_id` (`package_id`) ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 

首先检查所有服务器的my.cnf校对。 你应该有类似的东西:

 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' character-set-server = utf8 collation-server = utf8_unicode_ci [client] default-character-set = utf8 

在Rails中第二次检查客户端的排序规则:

 ActiveRecord::Base.connection.collation