mysql編碼詳解


在開發程序的時候,我們使用mysql數據庫開發的時候,有時會碰到自己明明輸入的是中文,為什么數據庫中存儲的就是????

1、在配置Connection URL時,加上?useUnicode=true&characterEncoding=utf-8

2、編輯/etc/my.cnf

在[mysqld]下添加

default-character-set=utf8

在[client]下添加

default-character-set=utf8

 

可是這樣做的原理是什么?為什么這樣做就能解決問題那?

逐步分析一下:

1、useUnicode=true這個用加嗎?答案是不用,翻看connector-j-en.a4.pdf

 

它的默認值就是true

2、 mysqld 下的default_character_set=utf8;,這個需要嗎?答案是不需要。查看refman-5.1

它的作用是

當啟動mysqld時,根據使用的初始選項設置來確定服務器字符集和 校對規則。可以使用--default-character-set設置字符集;

如果在CREATE TABLE語句中沒有指定表字符集和校對規則,則使用數據庫字符集和校對規則作為默認值。默認數據庫的字符集和校對規則可以用作character_set_database和 collation_database系統變量。無論何時默認數據庫更改了,服務器都設置這兩個變量的值。如果沒有 默認數據庫,這兩個變量與相應的服務器級別的變量(character_set_server和collation_server)具有相同的值。

 

大白話就是:如果你建表的時候沒有指定字符編碼,則會使用character_set_database,如果character_set_database也沒有設值,則使用character_set_server

3、 client 下的default_character_set=utf8; 它是需要的,可是它的作用是干嗎的?

它的作用等同執行以下3個命令

SET character_set_client = utf8

SET character_set_results = utf8;

SET character_set_connection = utf8;

 

這3個參數的作用如下

 

系統變量character_set_client:用來指定解析客戶端傳遞數據的編碼

系統變量character_set_connection:用來指定數據庫內部處理時使用的編碼

系統變量character_set_results:用來指定數據返回給客戶端的編碼方式

 

現在講述一下?useUnicode=true&characterEncoding=utf-8中的characterEncoding

它的作用就是指定character_set_client和character_set_connection的值,而在jdbc鏈接中使用characterSetResults=UTF-8,即可設置character_set_results的值

但是如上所述,當你配置了client的default_character_set之后,characterEncodingcharacterSetResults這兩個變量你設置與否都不重要了。

 

結論如下:

如果你只願意配置服務器的話:

在[client]下添加

default-character-set=utf8即可

如果你只願意配置客戶端的話:

你可以使用jdbc:mysql://localhost:3306/test? characterEncoding=UTF-8&characterSetResults=UTF-8即可

 

使用jdbc

character_set_client - utf8

character_set_connection - utf8

character_set_database - utf8

character_set_filesystem - binary

character_set_results -

character_set_server - utf8

character_set_system - utf8

character_sets_dir - /usr/share/mysql/charsets/

使用mysql客戶端

character_set_client utf8

   

character_set_connection utf8

 

character_set_database utf8

   

character_set_filesystem binary

 

character_set_results utf8

   

character_set_server utf8

   

character_set_system utf8

   

character_sets_dir /usr/share/mysql/charsets/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM