У меня есть следующая таблица:
mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| 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 | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
Я использую драйвер JDBC. Таблицы с текстовыми полями, которые должны поддерживать utf8, создаются так:
jdbcTemplate.execute(
"CREATE TABLE IF NOT EXISTS users"+
"(id BIGINT NOT NULL AUTO_INCREMENT,"+
"name VARCHAR(45),"+
"................."+
"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
На локальной машине все работает. Но на сервере Ubuntu я получаю сообщение «???????» вместо обычного имени в UTF-8. Как это исправить? Приложение работает через Nginx. Возможно, в этом проблема?
См. «знаки вопроса» в stackoverflow.com/questions/38363566/…






Добавить запись в файл /etc/mysql/my.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
Это сработало для меня. И я создал базу данных через терминал:
CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
В этом нет необходимости -> «ENGINE=InnoDB DEFAULT CHARSET=utf8mb4». В результате рабочий лист выглядит следующим образом:
mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
Пожалуйста, примите ваш ответ и закройте тикет..
Больше похоже на вопрос Администраторам базы данных, чем на вопрос о переполнении стека.