標籤:
前言: 一般來說,出現中文亂碼,都是用戶端和服務端字元集不匹配導致的原因。 (預設未指定字元集建立的資料庫表,都是latinl字元集, 強烈建議使用utf8字元集) 保證不出現亂碼的思想:保證用戶端、服務端、資料庫、表字元集統一 坑:有的時候,cmd或者linux系統字元集問題,其實資料庫是正確的,只是我們執行命令在終端看到的是亂 碼而已,這時需要設定linux系統字元集 1、查看liunx系統字元集:cat /etc/sysconfig/i18n 2、vim /etc/sysconfig/i18n 一、查看是什麼字元集 1、查尋資料庫是什麼字元集 show create database django\G (django 是資料庫名稱) 2、查尋表是什麼字元集 show create table auth_group\G (auth_group 是表名稱) ENGINE = InnoDB 該表資料庫引擎是InnoDB DEFULT CHARSET=utf8 該表字元集是utf8 COLLATE utf8_general_ci 校準規則 3、查看所有字元集和對應的校準規則 show character set; 二、解決方案: 1、插入資料的時候,先設定用戶端插入字元集和資料庫建表相同的字元集 eg:如果資料庫表字元集是latinl,那麼插入資料的時候也要是latinl 方法:set names latinl insert into student value(‘飛東‘) 2、將SQL語句放入檔案中,使用source來執行這個檔案,插入資料,則不會出現亂碼,原理是和1一樣的, 只是放在檔案中執行而已 方法:將下面兩個語句放入一個建立檔案中,如mysql.sql set names Latinl insert into student value(‘飛東‘) 執行這個檔案:source mysql.sql 3、從其他檔案匯入資料庫(避免匯入資料有中文亂碼的問題) 將資料編碼格式儲存為utf-8(UTF8不要匯入gbk,gbk不要匯入UTF8) set names utf8; ALTERDATABASEDEFAULTCHARACTERSETCOLLATE utf8_general_ci; 修改資料庫的編碼格式 ALTERTABLEDEFAULTCHARACTERSETCOLLATE utf8_general_ci; 修改表的編碼格式 LOADLOCAL‘C:\\utf8.txt‘INTOTABLE tb_name; 從檔案中匯入資料庫 4、永久修改預設用戶端編碼格式(修改my.cnf設定檔,針對MySQL 5.5版本以上) 5、永久修改預設服務端編碼格式(修改my.cnf設定檔,針對MySQL 5.5版本以上) 修改完畢之後重啟mysqld服務:service mysqld restart 三、常用命令 1、查看預設編碼格式 show variables like "%char%"; character_set_client(用戶端)、character_set_connection(串連)、character_set_results(結果) 三者字元集是一致的
2、修改資料庫的編碼格式
ALTERDATABASEDEFAULTCHARACTERSETCOLLATE utf8_general_ci;
3、修改表的編碼格式
ALTERTABLEDEFAULTCHARACTERSETCOLLATE utf8_general_ci;
4、通過ALTER 修改庫或者表的字元集,只是對之後插入的資料有效,原來已經存在的資料無法修改,如果需要修改原來帶有資料的字元集,只能通過把原來的資料匯出來,再插入到新的已經修改過字元集的表(資料庫)中。
四、建議 1、中英文環境,linux設定系統字元集為utf8,資料庫服務端,用戶端,資料庫,表都是utf8字元集 2、無論是查尋還是插入,都先用set names utf8 先設定一下字元集 3、建議建資料庫語句: 4、建議表語句:
MySQL學習筆記一---字元亂碼問題和字元集精髓