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