Рельсы показывают вопросительные знаки (????) для моих входных данных utf8 - PullRequest
9 голосов
/ 28 февраля 2012

Я установил для каждой переменной набора кодировок значение utf8.

В database.yml:

development: &development
  adapter: mysql2
  encoding: utf8

В my.cnf:

[client]
default-character-set = utf8

[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

А если я запускаю клиент mysql в терминале:

mysql> show variables like 'character%';
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+

mysql> show variables like 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

Но это бить по воздуху. Когда я вставляю данные utf8 из приложения Rails, они, наконец, становятся ????????????.

Что мне не хватает?

Ответы [ 5 ]

15 голосов
/ 02 июня 2012

Проверьте не глобальные настройки, а когда вы подключены к конкретной базе данных для приложения.Когда вы изменили настройки для MySQL, вы также изменили настройки для базы данных вашего приложения.

Простой способ проверить это - войти в mysql в приложение db:

mysql app_db_production -u db_user -p   

или команду rails:

rails dbconsole production

Для моего приложения это выглядит так:

mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| 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   | latin1_swedish_ci |
| collation_server     | utf8_general_ci   |
+----------------------+-------------------+
3 rows in set (0.00 sec)

Команда для изменения параметров сортировки базы данных и набора символов:

mysql> alter database app_db_production  CHARACTER SET utf8 COLLATE utf8_general_ci ;
Query OK, 1 row affected (0.00 sec)

И не забудьте изменить набор символов и параметров сортировки для всех ваших таблиц:

ALTER TABLE tablename CHARACTER SET utf8 COLLATE utf8_general_ci; # changes for new records
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; # migrates old records 

Теперь это должно произойтиработа.

3 голосов
/ 28 апреля 2014

У меня была такая же проблема. Я добавил кодировку символов в конец строки подключения mysql:

use this: jdbc:mysql://localhost/dbname?characterEncoding=utf8
instead of this: jdbc:mysql://localhost/dbname
1 голос
/ 10 апреля 2013

Ладно, для кого-либо еще, для кого ответ @Ravbaker его не обрезает .. еще несколько советов

MySQL имеет кодировку, указанную на нескольких уровнях: сервер, база данных, соединение, таблица и даже поле / столбец. Моя проблема заключалась в том, что поле / столбец были вынуждены использовать латиницу (которая перебирает все остальные кодировки). Я вернул поле в кодировку таблицы (которая была utf-8), и мир снова стал хорошим.

Большинство этих настроек можно установить в обычных местах: my.cnf, alter query и файл rails database.yml.

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;

был запрос, который помог мне.

Для кодировок сервера / соединения используйте my.cnf и database.yml Для кодирования базы данных / таблицы / столбца используйте запросы

(Вы также можете достичь этого другими способами)

0 голосов
/ 30 августа 2012

У меня сегодня проблемы! Это решается путем удаления моей таблицы и создания нового, затем db: migrate, и все довольно хорошо!
ВНИМАНИЕ: В ЭТОЙ ТАБЛИЦЕ УДАЛЕНЫ ВСЕ ВАШИ ДАННЫЕ
Итак:
$ mysql -u USER -p<br /> mysql > drop database YOURDB_NAME_development;<br /> mysql > create database YOURDB_NAME_development CHARACTER SET utf8 COLLATE utf8_general_ci;<br /> mysql > \q<br /> $ rake db:migrate<br /> Молодец!

0 голосов
/ 28 февраля 2012

У вас есть это в HTML?

<meta http-equiv="content-type" content="text/html;charset=UTF-8" />

или на страницах HTML5 с <!doctype html>

<meta charset="utf-8">

Это может понадобиться браузеру для отправки строк в utf8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...