MySQL無(wú)法輸入中文字符問(wèn)題的解決辦法
前幾日在使用MySQL數(shù)據(jù)庫(kù)的時(shí)候,出現(xiàn)了一處保存,故作此記錄?
問(wèn)題描述
下面是我這樣exam表的結(jié)構(gòu)
mysql> desc exam; +---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(50) | YES | | NULL | | | chinese | decimal(3,1) | YES | | NULL | | | math | decimal(3,1) | YES | | NULL | | | english | decimal(3,1) | YES | | NULL | | +---------+--------------+------+-----+---------+-------+
然后我使用insert into語(yǔ)句往這個(gè)表中插入了一條記錄
mysql> insert into exam values (1, '張三', 78, 89, 93);
但是卻報(bào)出了下面這樣的錯(cuò)誤
ERROR 1366 (HY000): Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
仔細(xì)閱讀報(bào)錯(cuò)提示后,說(shuō)是【位于第1行“name”列的字符串值“\xE5\xBC\xA0\xE4\xB8\x89”不正確】
問(wèn)題排查
然后我思考了一下??可能是和當(dāng)前數(shù)據(jù)庫(kù)的字符集設(shè)置有關(guān)系,因?yàn)槲以诓迦胗⑽牡臅r(shí)候是沒(méi)有問(wèn)題的
然后便使用下面這句查看了一下當(dāng)前我的MySQL的各種編碼
show variables like '%character%';
然后一查看就發(fā)現(xiàn)我的【character_set_database】數(shù)據(jù)庫(kù)字符集為latin1,也就是拉丁文,對(duì)于這種字符集來(lái)說(shuō)支持不了中文的
mysql> show variables like '%character%'; +--------------------------+---------------------------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ | +--------------------------+---------------------------------------------------------+ 8 rows in set, 1 warning (0.01 sec)

解決方案
然后來(lái)說(shuō)一下該如何去解決這個(gè)問(wèn)題,這里提供兩種解決方案
創(chuàng)建數(shù)據(jù)庫(kù)時(shí)設(shè)置字符集為utf8
create database 數(shù)據(jù)庫(kù)名 character set utf8;
例如下面這里,我新創(chuàng)建了一個(gè)名為test的數(shù)據(jù)庫(kù),后面跟上character set utf8后,再去查看當(dāng)前數(shù)據(jù)庫(kù)的字符集就是utf8了
mysql> create database test character set utf8; Query OK, 1 row affected (0.00 sec) mysql> 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 | latin1 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ | +--------------------------+---------------------------------------------------------+ 8 rows in set, 1 warning (0.00 sec)
?? 那有人就會(huì)說(shuō):這樣不是很麻煩嗎,每次去創(chuàng)建數(shù)據(jù)庫(kù)都要手動(dòng)指定一下字符集
是的,所以你可以考慮第二種方案,做到一勞永逸
修改數(shù)據(jù)庫(kù)配置文件【比較麻煩】
什么是配置文件?
- 用戶配置文件就是在用戶登錄電腦時(shí),或是用戶在使用軟件時(shí),軟件系統(tǒng)為用戶所要加載所需環(huán)境的設(shè)置和文件的集合
- 很多程序,內(nèi)部支持多種“模式”,可以調(diào)整當(dāng)前程序,讓他應(yīng)用那種模式。 因此就可以借助“開(kāi)關(guān)”來(lái)切換模式!軟件的開(kāi)關(guān)通常會(huì)用一個(gè)“圖形化界面”,但是對(duì)于 MySQL 等專(zhuān)用軟件則一般沒(méi)有對(duì)應(yīng)的圖形化界面表示開(kāi)關(guān)。只是通過(guò)一個(gè)【專(zhuān)門(mén)的文件】,來(lái)保存這些開(kāi)關(guān)。這個(gè)文件就是 “配置文件”
① 而對(duì)于MySQL的配置文件就叫做my.ini,我們可以通過(guò)【Everything】這個(gè)搜索工具來(lái)進(jìn)行查找

② 打開(kāi)路徑后我們就看到了這個(gè)文件,當(dāng)然你也可以直接在C盤(pán)的MySQL安裝位置中招(MySQL默認(rèn)安在C盤(pán))
?注意看我下面的兩個(gè)備份文件,在修改重要的配置文件前要先進(jìn)行備份

③ 然后我們就可以通過(guò)記事本等方式去打開(kāi)這個(gè)配置文件

④ 接下去找到這兩個(gè)地方,把前面的# + 空格去掉,并且在=后面加上utf8【注意這里一點(diǎn)空格也不要加?。。 ?/strong>

⑤ 在上面修改完配置文件,Ctrl + s后,找自己的電腦中找到【服務(wù)】,然后往下拉找到有關(guān)MySQL的,它便是你的MySQL服務(wù)器,重啟一下即可
?注意在重啟前要保證配置文件修改正確,否則MySQL會(huì)啟動(dòng)失敗的

⑥ 接下去就可以再次啟動(dòng)MySQL創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)去看看我們的數(shù)據(jù)庫(kù)默認(rèn)字符集是否改成utf8了
?注意之前創(chuàng)建的那個(gè)數(shù)據(jù)庫(kù)要?jiǎng)h掉,因?yàn)槠淠J(rèn)的字符集就是[latin1]

⑦ 然后我們?cè)僭囈幌氯ゲ迦胍粭l帶有中文字符的記錄,就發(fā)現(xiàn)沒(méi)問(wèn)題了( •? ω •? )y
mysql> insert into exam values (1, '李四', 79, 82, 92); Query OK, 1 row affected (0.00 sec)
寫(xiě)在最后
再看完了上面的這些內(nèi)容后,我們來(lái)聊聊有關(guān)MySQL報(bào)錯(cuò)的問(wèn)題
如果你使用過(guò)MySQL的話,就可以知道我們?cè)诔鯇W(xué)CRUD的時(shí)候,會(huì)出現(xiàn)很多的報(bào)錯(cuò),于是很多同學(xué)面對(duì)英文的報(bào)錯(cuò)就不知道該如何是好,就懶得學(xué)習(xí)了,這其實(shí)是不對(duì)的 如果英語(yǔ)基礎(chǔ)不太好的同學(xué)可以把報(bào)錯(cuò)的提示放在翻譯軟件中去進(jìn)行查看,若是能看懂的話最好,如果看不懂的話可以去百度搜搜看看,學(xué)會(huì)去發(fā)現(xiàn)問(wèn)題、排查問(wèn)題,最后解決問(wèn)題
到此這篇關(guān)于MySQL無(wú)法輸入中文字符問(wèn)題的解決辦法的文章就介紹到這了,更多相關(guān)MySQL無(wú)法輸入中文字符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL優(yōu)化之對(duì)RAND()的優(yōu)化方法
這篇文章主要介紹了MySQL優(yōu)化之對(duì)RAND()的優(yōu)化方法,本文詳細(xì)分析了Mysql中對(duì)RAND()的幾種優(yōu)化方法,并最終得出一個(gè)結(jié)論,需要的朋友可以參考下2014-07-07
一些mysql啟動(dòng)參數(shù)的說(shuō)明和優(yōu)化方法
要求MySQL能有的連接數(shù)量。當(dāng)主要MySQL線程在一個(gè)很短時(shí)間內(nèi)得到非常多的連接請(qǐng)求,這就起作用,然后主線程花些時(shí)間(盡管很短)檢查連接并且啟動(dòng)一個(gè)新線程。2011-04-04
解析sql語(yǔ)句中l(wèi)eft_join、inner_join中的on與where的區(qū)別
以下是對(duì)在sql語(yǔ)句中l(wèi)eft_join、inner_join中的on與where的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下2013-07-07
MySQL存儲(chǔ)引擎應(yīng)用場(chǎng)景MyISAM?vs?InnoDB優(yōu)勢(shì)選擇
這篇文章主要為大家介紹了MySQL存儲(chǔ)引擎應(yīng)用場(chǎng)景MyISAM?vs?InnoDB優(yōu)勢(shì)選擇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
MySql?explain命令返回結(jié)果詳細(xì)介紹
explain?是MySql提供的SQL語(yǔ)句查詢性能的工具,是我們優(yōu)化SQL的重要指標(biāo)手段,要看懂explain返回的結(jié)果集就尤為重要,這篇文章主要介紹了MySql?explain命令返回結(jié)果解讀,需要的朋友可以參考下2023-09-09
MySql數(shù)據(jù)引擎簡(jiǎn)介與選擇方法
在MySQL 5.1中,MySQL AB引入了新的插件式存儲(chǔ)引擎體系結(jié)構(gòu),允許將存儲(chǔ)引擎加載到正在運(yùn)新的MySQL服務(wù)器中2012-11-11
MySQL中between...and的使用對(duì)索引的影響說(shuō)明
這篇文章主要介紹了MySQL中between...and的使用對(duì)索引的影響說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07

