Я устанавливаю новый экземпляр приложения Rails (2.3.5) на Heroku, используя Amazon RDS в качестве базы данных. Я хотел бы использовать UTF-8 для всего. Поскольку RDS не является UTF-8 по умолчанию, я настроил новую группу параметров и переключил базу данных, чтобы использовать ее, в основном для этого . Кажется, сработало:
SHOW VARIABLES LIKE '%character%';
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 /rdsdbbin/mysql-5.1.50.R3/share/mysql/charsets/
Кроме того, я успешно настроил Heroku для использования базы данных RDS. После граблей db: migrate все выглядит хорошо:
CREATE TABLE `comments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`commentable_id` int(11) DEFAULT NULL,
`parent_id` int(11) DEFAULT NULL,
`content` text COLLATE utf8_unicode_ci,
`child_count` int(11) DEFAULT '0',
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `commentable_id` (`commentable_id`),
KEY `index_comments_on_community_id` (`community_id`),
KEY `parent_id` (`parent_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
В разметку я включил:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Также я установил:
production:
encoding: utf8
collation: utf8_general_ci
... в файле database.yml, хотя я не очень уверен, что в этом случае что-либо делается для соблюдения любых из этих настроек, поскольку Heroku, похоже, выполняет свою собственную настройку при подключении к RDS.
Теперь я ввожу комментарий через форму в приложении: «Úbe® ƒåiL», но в базе данных у меня есть «Ãšbe® Æ’Ã ¥ iL»
Выглядит хорошо, когда Rails загружает его обратно из базы данных, и он отображается на странице, поэтому, что бы он ни делал, он отменяет другой. Если я посмотрю на базу данных RDS в Sequel Pro, то все будет хорошо, если я установлю кодировку "UTF-8 Unicode via Latin 1". Так что, кажется, что где-то подкрадывается Latin-1.
Все работает в разработке, при подключении к локальной базе данных MySQL.
Кто-то должен был сделать это раньше, верно? Чего мне не хватает?