国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

Mysql5寫中文亂碼問題解決

2024-07-24 12:57:41
字體:
來源:轉載
供稿:網友

我插入MySQL5的中文一直是亂碼。
但是直接使用mysqlAdmin,EMS等工具插入DB就不是亂碼。而且我還可以使用程序正常地讀出來。

原因是:
DBDriverClass=com.mysql.jdbc.Driver
DBURL=jdbc:mysql://10.4.2.52:3306/srx?useUnicode=true&characterEncoding=utf-8
這樣的URL中useUnicode=true和characterEncoding=utf-8兩個屬性都不好用。

所以,數據庫服務器無法從URL中獲知Client使用了哪個編碼。于是就使用數據庫服務器上默認的latin也就是iso-8859-1編碼來解析用戶發送的sql語句。這樣,原本用戶是用操作系統的編碼,但是服務器硬給轉成ISO-8859-1,所以就亂碼了。

Client端只要配置好
useUnicode=true
characterEncoding=utf-8
這兩個屬性。只要指定了,就不會亂碼。utf-8可以,gb2312可以,gbk可以。指定了什么,Client就默認以這種
編碼轉換SQL語句,服務器也就知道怎么轉會去。


怎么看客戶端發送給服務器的SQL使用什么編碼呢?

在客戶端寫個程序,執行SQL語句:
public void select() throws SQLException {
        ResultSet rs = this.cnn.createStatement().executeQuery("SHOW VARIABLES LIKE 'character_set_%'");
        while(rs.next()){
            System.out.PRintln(rs.getString(1)+","+rs.getString(2));
        }
        rs.close();
    }
沒有配置characterEncoding=utf-8之前,我使用的是DBURL=jdbc:mysql://10.4.2.52:3306/srx?useUnicode=true&characterEncoding=utf-8 這樣的配置。結果用select()方法查詢結果如下:

character_set_client,latin1
character_set_connection,latin1
character_set_database,utf8
character_set_filesystem,binary
character_set_results,
character_set_server,latin1
character_set_system,utf8
character_sets_dir,/usr/local/mysql-standard-5.0.27-linux-i686/share/mysql/charsets/

注意第一行就可以了,可見使用的是latin1。

而latin1本身就無法表示漢字,經過這個編碼打包的SQL語句發給Server,Server也用Latin1解析也無法還原。

所以,我總是寫亂碼到DB。

而配置了配置characterEncoding=utf-8之后,
執行select(),結果:
character_set_client,utf8
character_set_connection,utf8
character_set_database,utf8
character_set_filesystem,binary
character_set_results,
character_set_server,latin1
character_set_system,utf8
character_sets_dir,/usr/local/mysql-standard-5.0.27-linux-i686/share/mysql/charsets/

第一行為utf-8,SQL將用UTF8打包給Server,Server也用Client配置的UTF8
解析。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浦城县| 浦东新区| 苍溪县| 武威市| 大港区| 个旧市| 韶关市| 基隆市| 桑植县| 和静县| 阿拉善盟| 襄垣县| 库伦旗| 铅山县| 新野县| 江永县| 达拉特旗| 芒康县| 新丰县| 天祝| 新化县| 西宁市| 三门县| 江安县| 康保县| 松滋市| 蓬安县| 张掖市| 万州区| 西畴县| 高唐县| 齐河县| 淮滨县| 鸡泽县| 水富县| 陇川县| 陕西省| 特克斯县| 土默特右旗| 江津市| 同德县|