1、中文亂碼
創(chuàng)新互聯(lián)公司長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為宿遷企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、做網(wǎng)站,宿遷網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
1.1、中文亂碼
create table user(name varchar(11)); ? ?# 創(chuàng)建user表 insert into table user("carl"); ? ? ? ? # 添加數(shù)據(jù) select * from user;123
insert into user value("哈哈");1
無法插入中文字符:
1.2、查看表字符編碼
mysql show create table user \G;*************************** 1. row *************************** ? ? ? Table: userCreate Table: CREATE TABLE `user` ( ?`name` varchar(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)1234567
我們可以看到表的默認(rèn)字符集是latin1.
所以我們在創(chuàng)建表的時(shí)候就需要指定表的字符集:
create table user(name varchar(11)) default charset=utf8; 1
這樣在Linux里面可以訪問并且可以插入與訪問這個(gè)表了。
1.3、數(shù)據(jù)庫與操作系統(tǒng)編碼
雖然在服務(wù)器端可以顯示中文正常,但是在客戶端可能會(huì)顯示亂碼。因?yàn)槲覀兊姆?wù)器是UTF8。
而且數(shù)據(jù)庫的編碼也存在問題。
這里我們可以看character_sert_database與character_set_server的字符集都是latin1.那么在mysql數(shù)據(jù)庫中,server,database,table的字符集都默認(rèn)是latin1.下面我們就來看看如何解決mysql亂碼情況。
2、mysql設(shè)置變量的范圍
2.1、session范圍
查看數(shù)據(jù)庫編碼:
show variables like '%char%';1
修改字符編碼:
set character_set_server=utf8;set character_set_database=utf8;show variables like '%char%';123
我們可以看到字符集已經(jīng)修改成都是utf8了。但是這里有一個(gè)問題,那就是我們重新打開一個(gè)命令窗口然后查看數(shù)據(jù)編碼就會(huì)出現(xiàn)下面的畫面:
2.2、global范圍
mysql設(shè)置變量的范圍默認(rèn)是session范圍。如果設(shè)置多個(gè)會(huì)話的字符集那么需要設(shè)置global范圍:Set [global|session] variables …
set global character_set_database=utf8;set global character_set_server=utf8;show variables like '%char%';123
當(dāng)我們跨會(huì)話查看mysql字符集都會(huì)看到都是utf8。如果你以為萬事大吉了的話,那么你就大錯(cuò)特錯(cuò)了。
2.3、設(shè)置數(shù)據(jù)全局范圍
當(dāng)我們數(shù)據(jù)庫重啟的時(shí)候,你們發(fā)現(xiàn)設(shè)置global范圍的值又變成latin1了。
service mysqld restart
mysql -uroot -pyourpasswordshow variables like '%char%';123
不要怕,下面就教你終極大招:
修改mysql配置文件/etc/my.cnf。
[mysqld]
character-set-server=utf8
[client]default-character-set=utf8
[mysql]default-character-set=utf8123456
請注意這幾個(gè)參數(shù)配置的位置,不然可能會(huì)啟動(dòng)不起來mysql服務(wù):
OK。這下如果你重啟mysql服務(wù)也會(huì)發(fā)現(xiàn)它的字符集是utf8.
而且我們創(chuàng)建表的時(shí)候不需要指定字符編碼,它默認(rèn)就是utf8;
drop database test;create database test;use test;create table user(name varchar(11));show create table user \G;12345
navicat for mysql不能顯示中文的方法如下:
1.首先修改mysql字符集,這個(gè)有說改配置文件,打開my.ini配置文件(MySQL的配置文件),加入:character_set_server = utf8
2.用的是命令行方式修改,如下:進(jìn)入cmd命令,進(jìn)入mysql的bin目錄下,啟動(dòng)mysql;使用命令:show VARIABLES like 'character%'; ?查看當(dāng)前字符集,發(fā)現(xiàn)都是gbk等字符集,這時(shí)使用如下命令改變字符集:
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 ;
3.無論使用修改配置文件還是使用命令行修改字符集,修改完成后,需要重啟mysql服務(wù),這時(shí),再用命令show VARIABLES like 'character%'; ?查看當(dāng)前字符集,已經(jīng)生效。
4.由于,已經(jīng)建立了數(shù)據(jù)庫,這時(shí)還需要在Navicat for mysql中,將數(shù)據(jù)庫的字符集也改掉。右鍵數(shù)據(jù)庫,選擇數(shù)據(jù)庫屬性,如圖。 進(jìn)入后,修改字符集為utf8
5.之后,還需要對每個(gè)表點(diǎn)擊右鍵,選擇 涉及表 ;然后在“選項(xiàng)”中,將表的字符集進(jìn)行修改。
6.還需要將varchar類型 字段的的字符集也要改掉,進(jìn)入設(shè)計(jì)表中,點(diǎn)中某字段,發(fā)現(xiàn),數(shù)據(jù)類型果然還是Latin1,那么好,一個(gè)一個(gè)改過來即可。當(dāng)然,也可以使用命令的方式修改,命令如下:ALTER TABLE ?表名 CHANGE ?列名 ?列名 ?VARCHAR( 100 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;
ps:可以先嘗試修改字符,如果修改字符依舊無效可以使用上述的辦法。
mysql把語言改成中文的步驟如下:
第一步我們需要打開軟件,創(chuàng)建一個(gè)數(shù)據(jù)庫,如下圖所示:
第二步創(chuàng)建數(shù)據(jù)庫之后,需要?jiǎng)?chuàng)建一張漢字和拼音對照表,使用create table語句創(chuàng)表,如下圖所示:
第三步我們打開表,可以看到成功創(chuàng)建一張名為t_base_pinyin的表,并且含有pin_yin_和code_兩個(gè)字段,如下圖所示:
第四步我們使用INSERT INTO t_base_pinyin ()? VALUES ()語句來給漢字拼音對照表添加對照數(shù)據(jù),如下圖所示:
第五步我們打開t_base_pinyin ,可以看到對照數(shù)據(jù)已經(jīng)插入成功,如下圖所示:
第六步我們最后需要?jiǎng)?chuàng)建一個(gè)拼音轉(zhuǎn)換漢字的函數(shù),輸入完成之后進(jìn)行執(zhí)行,語句如下圖所示:
第七步我們輸入select to_pinyin('測試')語句進(jìn)行查詢,可以看到輸出to_pinyin('測試'),ceshi,已經(jīng)成功將中文轉(zhuǎn)換成拼音,如下圖所示: