一般來(lái)說(shuō),出現(xiàn)中文亂碼,都是客戶端和服務(wù)端字符集不匹配導(dǎo)致的原因。(默認(rèn)未指定字符集創(chuàng)建的數(shù)據(jù)庫(kù)表,都是latinl字符集, 強(qiáng)烈建議使用utf8字符集)
保證不出現(xiàn)亂碼的思想:保證客戶端、服務(wù)端、數(shù)據(jù)庫(kù)、表字符集統(tǒng)一
坑:有的時(shí)候,cmd或者linux系統(tǒng)字符集問(wèn)題,其實(shí)數(shù)據(jù)庫(kù)是正確的,只是我們執(zhí)行命令在終端看到的是亂碼而已,這時(shí)需要設(shè)置linux系統(tǒng)字符集
1、查看liunx系統(tǒng)字符集:cat /etc/sysconfig/i18n
2、vim /etc/sysconfig/i18n
備注:始終牢記,存放數(shù)據(jù)的是字段,所以編碼最后是以字段的編碼為準(zhǔn),數(shù)據(jù)庫(kù)和表的編碼影響的時(shí)候字段的默認(rèn)值,也就是說(shuō)在設(shè)置了數(shù)據(jù)庫(kù)編碼之后,新建的表在不指定的情況下就會(huì)和數(shù)據(jù)庫(kù)編碼相同,而不指定字段的編碼時(shí),字段的編碼和表相同。如果使用 Alter 修改一個(gè)表的字符編碼,那原來(lái)的字段編碼并不會(huì)發(fā)生改變,如果需要修改表編碼的同時(shí)修改字段的編碼,可以使用 convert
創(chuàng)新互聯(lián)公司自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元紫陽(yáng)做網(wǎng)站,已為上家服務(wù),為紫陽(yáng)各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
show create database django\G (django 是數(shù)據(jù)庫(kù)名稱)
show create table auth_group\G (auth_group 是表名稱)
ENGINE = InnoDB 該表數(shù)據(jù)庫(kù)引擎是InnoDB
DEFULT CHARSET=utf8 該表字符集是utf8
COLLATE utf8_general_ci 校準(zhǔn)規(guī)則
show character set;
eg:如果數(shù)據(jù)庫(kù)表字符集是latinl,那么插入數(shù)據(jù)的時(shí)候也要是latinl
方法:set names latinl
insert into student value('飛東')
方法:將下面兩個(gè)語(yǔ)句放入一個(gè)新建文件中,如MySQL.sql
set names Latinl
insert into student value('飛東')
執(zhí)行這個(gè)文件:source mysql.sql
將數(shù)據(jù)編碼格式保存為utf-8(UTF8不要導(dǎo)入gbk,gbk不要導(dǎo)入U(xiǎn)TF8)
set names utf8;
ALTERDATABASEDEFAULTCHARACTERSETCOLLATE utf8_general_ci; 修改數(shù)據(jù)庫(kù)的編碼格式
ALTERTABLEDEFAULTCHARACTERSETCOLLATE utf8_general_ci; 修改表的編碼格式
LOADLOCAL'C:\\utf8.txt'INTOTABLE tb_name; 從文件中導(dǎo)入數(shù)據(jù)庫(kù)
修改完畢之后重啟mysqld服務(wù):service mysqld restart
character_set_client(客戶端)、character_set_connection(連接)、character_set_results(結(jié)果) 三者字符集是一致的
ALTERDATABASEDEFAULTCHARACTERSETCOLLATE utf8_general_ci;
ALTERTABLEDEFAULTCHARACTERSETCOLLATE utf8_general_ci;
4、建議表語(yǔ)句: