Я реализовал смайлик для комментариев в своем веб-приложении / блоге Spring & Thymeleaf.
В настоящее время я могу выбрать смайлик, увидеть его в текстовой области, отправить форму, комментарийсохраненный в методе контроллера post в моей таблице базы данных MySQL 5.7.17 - я вижу смайлик в столбце таблицы - комментарий возвращается через ajax, и я вижу смайлики на странице.Ууууууу!
Но!После того, как я перезагружаю страницу ... я вижу это:
"ð ± и ð¶"
Что дает ??
Чтобы вставить смайлики в mysql, я следовал этому уроку:
https://mathiasbynens.be/notes/mysql-utf8mb4
Сохранение НЕ является проблемой.
Мой файл my.cnf, расположенный по адресу
/usr/local/Cellar/mysql/5.7.17/support-files/my.cnf
my.cnf:
--defaults-extra-file=#
[client]
default-character-set = utf8mb4
[mysqld]
init-connect='SET NAMES utf8mb4'
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4
, а затем сделал этот запрос:
ALTER TABLE comments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
и это:
mysql> SET NAMES 'utf8mb4';
Query OK, 0 rows affected (0.00 sec) [then I put: init-connect='SET NAMES utf8mb4' in the cnf file]
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR
Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)
^ Тем не менее, насколько я понимаю, это работает только один раз ^
, потому что когда я запускаю эту команду после запуска приложения, она читает:
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| collation_connection | utf8_general_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8_general_ci |
+--------------------------+--------------------+
10 rows in set (0.03 sec)
Мой pom.xml имеет следующее:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF 8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<property name="hibernate.connection.CharSet" value="utf8mb4" />
<property name="hibernate.connection.characterEncoding"
value="utf8mb4"/>
<property name="hibernate.connection.useUnicode" value="true"/>
</properties>
и на всех соответствующих HTML-страницах и на фрагменте заголовка, который у меня есть:
<meta charset="UTF-8">
Когда я System.out.println (comment.getBody ()) в методе PostMapping контроллера - как до, так и после сохранения комментария - я вижу смайлики в терминале просто отлично!Но когда я помещаю System.out.println (comment.getBody ()) в GetMapping для страницы, я вижу все странные символы, а не смайлики.Я действительно смущен.Как вы думаете, в чем проблема и что я должен сделать, чтобы решить ее?Любая помощь приветствуется, спасибо заранее!
(Из комментария:)
CREATE TABLE `comments` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`body` blob NOT NULL,
`created_date` datetime DEFAULT NULL,
`parent_id` bigint(20) DEFAULT NULL,
`post_id` bigint(20) DEFAULT NULL,
`user_id` bigint(20) DEFAULT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=2084 DEFAULT CHARSET=utf8