我已经在spring&thymeleaf的web应用/博客上实现了一个表情符号选取器。
目前,我可以选择一个emoji,看到它出现在textarea中,提交表单,注解保存在controller post方法中到我的mysql 5.7.17 db表中-我可以在表列中看到emoji艺术-注解通过ajax返回,我可以在页面上看到emoji。耶,呜呼!
但是!重新加载页面后。。。我看到了:
"ð± 以及ð¶"
什么给??
为了在mysql中插入表情符号,我遵循了以下教程:
https://mathiasbynens.be/notes/mysql-utf8mb4
储存不是问题。
我的my.cnf文件,位于
/usr/local/Cellar/mysql/5.7.17/support-files/my.cnf
我的.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">
当我在控制器的postmapping方法中输入system.out.println(comment.getbody())——在保存注解之前和之后——我可以很好地看到终端中的emojis!但是当我在页面的getmapping中输入system.out.println(comment.getbody())时,我看到的是所有奇怪的字符,而不是表情符号。我真的很困惑。你认为这个问题可能是什么?我应该怎么解决它?感谢您的帮助,提前谢谢!
(来自评论:)
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
1条答案
按热度按时间izj3ouym1#
看起来像“莫吉巴克”;用utf-8字符查看故障;我看到的不是我储存的
但是,自从
ð
是十六进制F0
,和F0
是emoji(etc)的开头,可能是您指定的utf8
在mysql中而不是utf8mb4
. 那是什么"ð± and ð¶"
应该是??Spring /冬眠:
休眠xml:
连接url:
db.url=jdbc:mysql://localhost:3306/db_nameuseUnicode=true&character_set_server=utf8mb4
创建表DEFAULT CHARSET=utf8
都这么说了VARCHAR
以及TEXT
列将是CHARSET utf8
除非被覆盖。body blob NOT NULL,
--你甚至没有使用像文本这样的数据类型!BLOB
说“把字节扔进去;想都别想CHARSET
".因为
BLOB
,如果表情符号进入body
,字节的输出方式应该与它们的输入方式相同。但是,让我们看看别的。请拿着HEX(body)
,最好是一个非常短的身体,也许什么都没有,但它的表情。例如,十六进制表示
?
--