MySQL無法輸入中文字符問題的解決辦法
前幾日在使用MySQL數(shù)據(jù)庫的時候,出現(xià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
語句往這個表中插入了一條記錄
mysql> insert into exam values (1, '張三', 78, 89, 93);
但是卻報出了下面這樣的錯誤
ERROR 1366 (HY000): Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
仔細閱讀報錯提示后,說是【位于第1行“name”列的字符串值“\xE5\xBC\xA0\xE4\xB8\x89”不正確】
問題排查
然后我思考了一下??可能是和當前數(shù)據(jù)庫的字符集設(shè)置有關(guān)系,因為我在插入英文的時候是沒有問題的
然后便使用下面這句查看了一下當前我的MySQL的各種編碼
show variables like '%character%';
然后一查看就發(fā)現(xiàn)我的【character_set_database】數(shù)據(jù)庫字符集為latin1
,也就是拉丁文,對于這種字符集來說支持不了中文的
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)
解決方案
然后來說一下該如何去解決這個問題,這里提供兩種解決方案
創(chuàng)建數(shù)據(jù)庫時設(shè)置字符集為utf8
create database 數(shù)據(jù)庫名 character set utf8;
例如下面這里,我新創(chuàng)建了一個名為test的數(shù)據(jù)庫,后面跟上character set utf8
后,再去查看當前數(shù)據(jù)庫的字符集就是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)
?? 那有人就會說:這樣不是很麻煩嗎,每次去創(chuàng)建數(shù)據(jù)庫都要手動指定一下字符集
是的,所以你可以考慮第二種方案,做到一勞永逸
修改數(shù)據(jù)庫配置文件【比較麻煩】
什么是配置文件?
- 用戶配置文件就是在用戶登錄電腦時,或是用戶在使用軟件時,軟件系統(tǒng)為用戶所要加載所需環(huán)境的設(shè)置和文件的集合
- 很多程序,內(nèi)部支持多種“模式”,可以調(diào)整當前程序,讓他應(yīng)用那種模式。 因此就可以借助“開關(guān)”來切換模式!軟件的開關(guān)通常會用一個“圖形化界面”,但是對于 MySQL 等專用軟件則一般沒有對應(yīng)的圖形化界面表示開關(guān)。只是通過一個【專門的文件】,來保存這些開關(guān)。這個文件就是 “配置文件”
① 而對于MySQL的配置文件就叫做my.ini
,我們可以通過【Everything】這個搜索工具來進行查找
② 打開路徑后我們就看到了這個文件,當然你也可以直接在C盤的MySQL安裝位置中招(MySQL默認安在C盤)
?注意看我下面的兩個備份文件,在修改重要的配置文件前要先進行備份
③ 然后我們就可以通過記事本等方式去打開這個配置文件
④ 接下去找到這兩個地方,把前面的# + 空格
去掉,并且在=
后面加上utf8
【注意這里一點空格也不要加?。?!】
⑤ 在上面修改完配置文件,Ctrl + s后,找自己的電腦中找到【服務(wù)】,然后往下拉找到有關(guān)MySQL的,它便是你的MySQL服務(wù)器,重啟一下即可
?注意在重啟前要保證配置文件修改正確,否則MySQL會啟動失敗的
⑥ 接下去就可以再次啟動MySQL創(chuàng)建一個新的數(shù)據(jù)庫去看看我們的數(shù)據(jù)庫默認字符集是否改成utf8了
?注意之前創(chuàng)建的那個數(shù)據(jù)庫要刪掉,因為其默認的字符集就是[latin1]
⑦ 然后我們再試一下去插入一條帶有中文字符的記錄,就發(fā)現(xiàn)沒問題了( •? ω •? )y
mysql> insert into exam values (1, '李四', 79, 82, 92); Query OK, 1 row affected (0.00 sec)
寫在最后
再看完了上面的這些內(nèi)容后,我們來聊聊有關(guān)MySQL報錯的問題
如果你使用過MySQL的話,就可以知道我們在初學(xué)CRUD的時候,會出現(xiàn)很多的報錯,于是很多同學(xué)面對英文的報錯就不知道該如何是好,就懶得學(xué)習(xí)了,這其實是不對的 如果英語基礎(chǔ)不太好的同學(xué)可以把報錯的提示放在翻譯軟件中去進行查看,若是能看懂的話最好,如果看不懂的話可以去百度搜搜看看,學(xué)會去發(fā)現(xiàn)問題、排查問題,最后解決問題
到此這篇關(guān)于MySQL無法輸入中文字符問題的解決辦法的文章就介紹到這了,更多相關(guān)MySQL無法輸入中文字符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL優(yōu)化之對RAND()的優(yōu)化方法
這篇文章主要介紹了MySQL優(yōu)化之對RAND()的優(yōu)化方法,本文詳細分析了Mysql中對RAND()的幾種優(yōu)化方法,并最終得出一個結(jié)論,需要的朋友可以參考下2014-07-07解析sql語句中l(wèi)eft_join、inner_join中的on與where的區(qū)別
以下是對在sql語句中l(wèi)eft_join、inner_join中的on與where的區(qū)別進行了詳細的分析介紹,需要的朋友可以參考下2013-07-07MySQL存儲引擎應(yīng)用場景MyISAM?vs?InnoDB優(yōu)勢選擇
這篇文章主要為大家介紹了MySQL存儲引擎應(yīng)用場景MyISAM?vs?InnoDB優(yōu)勢選擇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10MySQL中between...and的使用對索引的影響說明
這篇文章主要介紹了MySQL中between...and的使用對索引的影響說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07