在開發程序的時候,我們使用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之后,characterEncoding和characterSetResults這兩個變量你設置與否都不重要了。
結論如下:
如果你只願意配置服務器的話:
在[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/ |