2014-03-28 81 views
11

我在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 
+2

['mysql2 0.3.15'發佈於2014年1月23日(https://rubygems.org/gems/mysql2/versions),差不多2年前。你有沒有試過最新版本(目前是'0.4.2')? –

+0

嗨,我有同樣的問題,並想知道如果你已經解決了這個問題或找到一個合適的解決方法? – Nick

回答

0

第一。你應該有這樣的事情:

[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