Sam*_*uri 12 ruby encoding ruby-on-rails utf-8 mysql2
我使用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)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
小智 0
首先检查所有服务器的 my.cnf 排序规则。你应该有类似的东西:
\n\n[mysqld]\ninit_connect=\xe2\x80\x98SET collation_connection = utf8_unicode_ci\xe2\x80\x99\ncharacter-set-server = utf8\ncollation-server = utf8_unicode_ci\n\n[client]\ndefault-character-set = utf8\nRun Code Online (Sandbox Code Playgroud)\n\nRails 中客户端的第二次检查排序规则:
\n\nActiveRecord::Base.connection.collation\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |