【发布时间】:2014-05-08 07:47:00
【问题描述】:
我正在使用 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)
显示创建表产品:
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
【问题讨论】:
-
mysql2 0.3.15was released on January 23, 2014,差不多 2 年前。您是否尝试过最新版本(目前为0.4.2)? -
您好,我遇到了同样的问题,想知道您是否已解决此问题或找到合适的解决方法?
-
mysql2 为 JSON 序列化属性等二进制数据返回 ASCII-8BIT。
标签: ruby-on-rails ruby encoding utf-8 mysql2