MySQL數據庫亂碼-Linux下亂碼問題一 亂碼問題是很讓人抓狂的問題,下面我將記錄一下linux下mysql亂碼問題的解決方法。 mysql在linux下亂碼問題 一、操作 mysql默認字符集是latin1,但是我們大部分程序使用的字符集是utf8,我們就需要修改mysql的字符集了。 1)查看默認編碼
show variables like 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
Mysql下默認的編碼是latin1 2)查看默認排序方式
show variables like 'collation_%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-----------------+
3)修改默認字符集 修改文件/etc/my.cnf內容 在[client]下添加如下語句 default-character-set=utf8 在[mysqld]下添加 default-character-set=utf8 init_connect='SET NAMES utf8' ##設定連接mysql是使用UTF8編碼 修改好後,重啟mysql服務即可 4)另外一種修改字符編碼方法 登錄mysql後,輸入如下內容
mysql> SET character_set_client = utf8 ; mysql> SET character_set_connection = utf8 ; mysql> SET character_set_database = utf8 ; mysql> SET character_set_results = utf8 ; mysql> SET character_set_server = utf8 ; mysql> SET collation_connection = utf8 ; mysql> SET collation_database = utf8 ; mysql> SET collation_server = utf8 ;
5)重新查看
show variables like 'character%'; +--------------------------+---------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------+ | 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/ | +--------------------------+---------------------------------+ show variables like 'collation_%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+
6)使用JDBC連接mysql時需要將連接字符串改為如下方式: jdbc:mysql://localhost/mysql?useUnicode=true&characterEncoding=UTF-8 已utf8的方式連接 二、概念 character-set-server/default-character-set:服務器字符集,默認情況下所采用的。 character-set-database:數據庫字符集。 character-set-table:數據庫表字符集。 character-set-client:客戶端的字符集。客戶端默認字符集。當客戶端向服務器發送請求時,請求以該字符集進行編碼。 character-set-results:結果字符集。服務器向客戶端返回結果或者信息時,結果以該字符集進行編碼。 統一設置字符集編碼使用語句:set names utf8 三、導入導出防止亂碼 1.導出數據庫使用命令(在cmd下輸入) mysqldump -u用戶名 -p密碼 -h服務器地址 數據庫名稱 --default-character-set=utf8 --hex-blob >導出數據庫.sql --default-character-set=utf8 代表使用urf8編碼導出數據 --hex-blob 代表以16進制導出數據庫 2.導入數據庫使用命令(在cmd下輸入) mysql -u用戶名 -p密碼 -h服務器地址 數據庫名稱 --default-character-set=utf8 --hex-blob <導出數據庫.sql 除了使用上面的命令導入數據庫外,還可以登錄mysql,使用source命令導入 mysql> source 導出數據庫.sql 注:blob字段存放的是二進制數據,故其沒有字符集編碼,在window和linux使用以上方式還是會有亂碼的問題,故建議將blob類型修改為text類型,才不會出現亂碼。blob類型數據往text類型轉換,自己寫一個簡單的代碼,從blob讀出數據以字符串的形式存到text字段即可。