昨天把项目部署到服务器上后连的是SC的腾讯云数据库,测试后发现当往在页面上往数据库插数据会出现乱码问题,就是这个样子,输入汉字都是???,输入英文就没事:mysql
由于在本地测试用本地的数据库都没事情,插数据度数据都一点问题都没问题,就考虑到了应该是JDBC链接的时候的URL编码问题,在修改以前,咱们的链接是这样的:sql
jdbc:mysql://55e1aacb0d253.sh.cdb.myqcloud.com:11462/sh_books
网上搜了一下,说要在链接mysql数据库的时候通常都会在url后面添加useUnicode=true&characterEncoding=UTF-8,这样是修改后的数据库
jdbc:mysql://55e1aacb0d253.sh.cdb.myqcloud.com:11462/sh_books?useUnicode=true&characterEncoding=UTF-8
运行了下,报错了报错了!! 竟然报错了!错误提示的一部分是这样的:服务器
对实体 “characterEncoding” 的引用必须以 ‘;’ 分隔符结尾。ide
搜了一下,知道为何了,在xml的配置文件中 ;要用 &
代替,这是HTML中经常使用的字符实体,改完后呢就是这个样子啦:测试
jdbc:mysql://55e1aacb0d253.sh.cdb.myqcloud.com:11462/sh_books?useUnicode=true&characterEncoding=UTF-8
问题完美解决,可是为何要这样呢? 搜了一下相关的资料编码
咱们在,可是问什么要添加呢?url
咱们添加这个的添加的做用是:指定字符的编码、解码格式。spa
例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候若是添加了useUnicode=true&characterEncoding=UTF-8 ,那么做用有以下两个方面:code
存数据时:
数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,而后再将解码后的字节码从新使用GBK编码存放到数据库中。
取数据时:
在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,而后再将解码后的字节码从新按UTF-8格式编码数据,最后再将数据返回给客户端。
注意:在xml配置文件中配置数据库url时,要使用&的转义字符也就是&
例如:
<property name="url" value="jdbc:mysql://localhost:3306/email?useUnicode=true&characterEncoding=UTF-8" />
显示结果 | 说明 | Entity Name | Entity Number |
---|---|---|---|
显示一个空格 | |
  |
|
< | 小于 | < |
< |
> | 大于 | > |
> |
& | &符号 | & |
& |
“ | 双引号 | " |
" |
显示结果 | 说明 | Entity Name | Entity Number |
---|---|---|---|
? | 版权 | © |
© |
? | 注册商标 | ® |
® |
× | 乘号 | × |
× |
÷ | 除号 | ÷ |
÷ |