useUnicode=true 後面的配置 characterEncoding配置才能生效
characterEncoding=utf-8的配置的作用主要配置的是mysql服務端的編碼,mysql驅動的代碼中,會將將要發送mysql服務端的sql使用characterEncoding指定的值進行轉碼,然後將轉碼後的字節發送到mysql服務端
而mysql服務端響應的編碼是如何轉換的呢,主要是mysql服務端返回結果的時候,字節流的某一位標識的是當前字段的編碼格式,mysql驅動程序在解析數據時,會使用mysql服務端返回的字段編碼格式進行解碼;解碼後然後通過charset對象的decode方法進行轉碼,這個時候會根據自己項目當前的編碼方式自動識別。
最後得出的結論:
1. useUnicode=true&characterEncoding=utf-8 主要配置的客戶端發送數據到服務端時候,需要轉換成什麼樣的編碼發送給服務端
2. 客戶端接收到的數據不會出現亂碼,有一個前提,就是數據庫中的數據編碼沒有錯誤的情況下
官方也建議我們characterEncoding這個值的配置儘量與mysql服務端的編碼一致
如果不一致,會導致我們看到的結果出現亂碼
比如: mysql服務端的編碼爲UTF-8 而這個時候我們配置了 useUnicode=true&characterEncoding=gbk
那麼如果我們這時候插入了一條帶有中文的數據,則此時mysql中的此中文數據爲gbk的
然後我這時候查詢這條數據,mysql會將gbk的數據返回給我們,但告訴我們說 這個是UTF-8編碼的,這個時候mysql驅動包就會用UTF-8的編碼去解碼這段數據,這時候則會出現亂碼