1. 程式人生 > >mysql 配置 utf8 依然亂碼

mysql 配置 utf8 依然亂碼

有時候我們在 url 中配置了haracterEncoding=utf-8,並且對應的欄位的儲存方式也是 utf8 依然會出現亂碼的情況,這個時候你需要注意一下自己的驅動url的寫法是不是如下:

DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/shiro?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&");
        ds.setUsername("root");
        ds.setPassword("123456");

這種寫法是有問題的,它並不能被 mysql 正確的解析,因為 & 是配置在 xml 檔案中時候的寫法,它再被解析成文字之後是 &,如果你在java 程式裡面寫的時候直接這麼寫的話不能被正確解析,也就是傳輸過去的字元還是不能用 utf8 進行解析。

正確的寫法應該如下:

   DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/shiro?autoReconnect=true&useUnicode=true&characterEncoding=utf-8");
        ds.setUsername("root");
        ds.setPassword("123456");

url配置在xml中寫法:

jdbc:mysql://192.168.87.104:3306/cfhd?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&

url配置在java程式中寫法:

jdbc:mysql://192.168.87.104:3306/cfhd?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull;