我在Ruby 2.0.0-p353上運行Rails 4.0.4(通過rbenv + ruby-build)使用MySQL 5.1.71,使用mysql2寶石0.3.15。 CentOS 6.5。mysql2 gem 0.3.15給編碼設置爲「utf8」的ASCII-8BIT
在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產品:
在my.cnf整理所有檢查所有服務器的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.15'發佈於2014年1月23日(https://rubygems.org/gems/mysql2/versions),差不多2年前。你有沒有試過最新版本(目前是'0.4.2')? –
嗨,我有同樣的問題,並想知道如果你已經解決了這個問題或找到一個合適的解決方法? – Nick