jdbc 編碼 url 問題及原理

昨天把項目部署到服務器上後連的是SC的騰訊雲數據庫,測試後發現當往在頁面上往數據庫插數據會出現亂碼問題,就是這個樣子,輸入漢字都是???,輸入英文就沒事:mysql

這裏寫圖片描述

 

JDBC鏈接MySQL的URL編碼問題

由於在本地測試用本地的數據庫都沒事情,插數據度數據都一點問題都沒問題,就考慮到了應該是JDBC鏈接的時候的URL編碼問題,在修改以前,咱們的鏈接是這樣的:sql

jdbc:mysql://55e1aacb0d253.sh.cdb.myqcloud.com:11462/sh_books
  • 1


網上搜了一下,說要在鏈接mysql數據庫的時候通常都會在url後面添加useUnicode=true&characterEncoding=UTF-8,這樣是修改後的數據庫

jdbc:mysql://55e1aacb0d253.sh.cdb.myqcloud.com:11462/sh_books?useUnicode=true&characterEncoding=UTF-8
  • 1


運行了下,報錯了報錯了!! 竟然報錯了!錯誤提示的一部分是這樣的:服務器

對實體 「characterEncoding」 的引用必須以 ‘;’ 分隔符結尾。ide


搜了一下,知道爲何了,在xml的配置文件中 ;要用 &代替,這是HTML中經常使用的字符實體,改完後呢就是這個樣子啦:測試

jdbc:mysql://55e1aacb0d253.sh.cdb.myqcloud.com:11462/sh_books?useUnicode=true&characterEncoding=UTF-8
  • 1


問題完美解決,可是爲何要這樣呢? 搜了一下相關的資料編碼

咱們在,可是問什麼要添加呢?url

 

原理:

咱們添加這個的添加的做用是:指定字符的編碼、解碼格式。spa

例如:mysql數據庫用的是gbk編碼,而項目數據庫用的是utf-8編碼。這時候若是添加了useUnicode=true&characterEncoding=UTF-8 ,那麼做用有以下兩個方面:code

  1. 存數據時:

    數據庫在存放項目數據的時候會先用UTF-8格式將數據解碼成字節碼,而後再將解碼後的字節碼從新使用GBK編碼存放到數據庫中。

  2. 取數據時:

    在從數據庫中取數據的時候,數據庫會先將數據庫中的數據按GBK格式解碼成字節碼,而後再將解碼後的字節碼從新按UTF-8格式編碼數據,最後再將數據返回給客戶端。

注意:在xml配置文件中配置數據庫url時,要使用&的轉義字符也就是&

例如:

<property name="url" value="jdbc:mysql://localhost:3306/email?useUnicode=true&amp;characterEncoding=UTF-8" />
  • 1

HTML中經常使用的特殊字符(Character Entities)

顯示結果 說明 Entity Name Entity Number
  顯示一個空格 &nbsp; &#160;
< 小於 &lt; &#60;
> 大於 &gt; &#62;
& &符號 &amp; &#38;
雙引號 &quot; &#34;

 

其餘經常使用的字符實體(Character Entities)

顯示結果 說明 Entity Name Entity Number
? 版權 &copy; &#169;
? 註冊商標 &reg; &#174;
× 乘號 &times; &#215;
÷ 除號 &divide; &#247;
相關文章
相關標籤/搜索