本篇文章給大家分享的是有關(guān)如何終結(jié)MySQL中文亂碼,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。
蒲江縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!
我自己都不知道為了中文問(wèn)題煩惱了多少個(gè)日子,最恨瑞典人了-誰(shuí)叫他發(fā)明了mysql,還設(shè)置了默認(rèn)設(shè)置:latin1.曾經(jīng)也在想假如中國(guó)人發(fā)明了 mysql(my see狗),呵呵,那么我們還有這樣煩惱嗎?默認(rèn)的就是gk2312 或者gbk.倘若考慮到臺(tái)灣朋友加一個(gè)big5.就得了??墒悄兀渴聦?shí)不是這樣的,沒(méi)有辦法,自己只好baidu一下,google一下,甚至yahoo 一下。能找到的方法都試過(guò)了,好久了,直到今天讓我找到了,想明白了。所以急切和大家分享以下心得。
為了說(shuō)的明白一些,我覺(jué)個(gè)例子:
很簡(jiǎn)單,就是從html中接受兩個(gè)輸入,然后由jsp處理寫(xiě)到mysql且從數(shù)據(jù)庫(kù)返回這個(gè)結(jié)果顯示出來(lái)。
Mysql_jstl.html
|
接下來(lái)就是創(chuàng)建數(shù)據(jù)庫(kù),名字為sample
然后建立一個(gè)table: employee,內(nèi)容如下(其中應(yīng)該是email,可是我不小心在建數(shù)據(jù)庫(kù)打錯(cuò)了,將錯(cuò)就錯(cuò)了):
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| employee_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| last_name | varchar(20) | YES | | NULL | |
| first_name | varchar(20) | YES | | NULL | |
| birth | date | YES | | NULL | |
| sex | enum('m','f') | YES | | m | |
| emmail | varchar(39) | YES | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
如果只是這樣的話(huà),就會(huì)出現(xiàn)這樣的錯(cuò)誤:報(bào)告的錯(cuò)誤是:sqle=com.mysql.jdbc.MysqlDataTruncation:Data truncation: Data too long
for column 'last_name' at row 1 從 employee!
有的情況是:| name |
+-------------+
| ?? |
| 54243654321 |
| ?? |
| ?? |
+-------------+出現(xiàn)問(wèn)號(hào)!
前面我們已經(jīng)說(shuō)過(guò)了,mysql默認(rèn)的編碼是latin1,不是我們所需要的gbk,所以我們要修改成為utf8,因?yàn)槿粢_顯示中文繁、簡(jiǎn)、日文、韓文 使用utf8,修改方法如下:
ALTER DATABASE sample ####這里修改整個(gè)數(shù)據(jù)庫(kù)的編碼
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci;
當(dāng)然了,你也可在在建數(shù)據(jù)庫(kù)的時(shí)候指定編碼,比如:
CREATE DATABASE sample
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci ;
接下來(lái)要做的是打開(kāi)mysql所在的目錄下的my.nin
mysql> show variables like '%character%'; +--------------------------+-------------------------------------------+ | Variable_name | Value | +--------------------------+-------------------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_results | latin1 | | character_set_server | utf8 | character_set_system | utf8 | | character_sets_dir | C:MySQLMySQL Server 5.0sharecharsets | +--------------------------+-------------------------------------------+ mysql> show variables like '%collation%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | latin1_swedish_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-------------------+
接著你再看看執(zhí)行那個(gè)Mysql.html 文件:這回你可以看到的是
mysql> select * from employee;
+-------------+-----------+------------+------------+------+--------------+
| employee_id | last_name | first_name | birth | sex | emmail |
+-------------+-----------+------------+------------+------+--------------+
| 12 | ? | ?? | 1978-12-11 | f | aaa@asdf.com |
| 13 | ? | ?? | 1978-12-11 | f | aaa@asdf.com |
| 14 | ? | ?? | 1978-12-11 | f | aaa@asdf.com |
| 15 | ? | ?? | 1978-12-11 | f | aaa@asdf.com |
| 16 | ? | ?? | 1978-12-11 | f | aaa@asdf.com |
| 17 | ? | ?? | 1978-12-11 | f | aaa@asdf.com |
+-------------+-----------+------------+------------+------+--------------+
這當(dāng)然不是我們希望看到的,我們需要的現(xiàn)實(shí)完美正確的中文:
我們還有最后一招:
mysql> SET NAMES 'gbk' ;Query OK, 0 rows affected (0.00 sec)
因?yàn)槲覀冃枰氖莋bk.
看看mysql中的character設(shè)置情況:
mysql> SHOW VARIABLES LIKE '%character%' ;
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:MySQLMySQL Server 5.0sharecharsets |
+--------------------------+-------------------------------------------+
7 rows in set (0.00 sec)
mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
這個(gè)才是我們最終需要的。
在來(lái)查看執(zhí)行完Mysql_jstl.jsp后的數(shù)據(jù)庫(kù)中的結(jié)果:
mysql> select * from employee;
| 14 | 王 | 彭給 | 1978-12-11 | f | aaa@asdf.com |
| 15 | 田 | 王光 | 1978-12-11 | f | aaa@asdf.com |
| 16 | 息 | 存入 | 1978-12-11 | f | aaa@asdf.com |
| 17 | 往 | 小杯 | 1978-12-11 | f | aaa@asdf.com |
+-------------+-----------+------------+------------+------+--------------+
可以高興得看到了中文,并且在瀏覽器中也顯示正確。
但是僅僅這樣的話(huà),當(dāng)你重新啟動(dòng)mysql的時(shí)候
所有的設(shè)置又失效了。
mysql> show variables like '%character%';
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:MySQLMySQL Server 5.0sharecharsets |
+--------------------------+-------------------------------------------+
mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-------------------+
重新讀取又出現(xiàn)亂碼:
mysql> select * from employee;
+-------------+-----------+------------+------------+--
| employee_id | last_name | first_name | birth | s
+-------------+-----------+------------+------------+--
| 12 | ? | ?? | 1978-12-11 | f
| 13 | ? | ?? | 1978-12-11 | f
| 14 | ? | ?? | 1978-12-11 | f
| 15 | ? | ?? | 1978-12-11 | f
| 16 | ? | ?? | 1978-12-11 | f
| 17 | ? | ?? | 1978-12-11 | f
+-------------+-----------+------------+------------+--
所以我們需要在客戶(hù)端設(shè)置系統(tǒng)能識(shí)別中文的編碼gbk并沒(méi)有保存到my.ini文件中。所以要修改my.ini文件
在[mysql]段加入一下代碼改成:default-character-set=gbk 這樣設(shè)置就得到保存了。
重啟就可以了。mysql> show variables like '%character%';
+--------------------------+----------------
| Variable_name | Value
+--------------------------+----------------
| character_set_client | gbk
| character_set_connection | gbk
| character_set_database | utf8
| character_set_results | gbk
| character_set_server | utf8
| character_set_system | utf8
| character_sets_dir | C:MySQLMySQL
+--------------------------+----------------
mysql> SHOW VARIABLES LIKE '%collation%' ;
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
以上就是如何終結(jié)mysql中文亂碼,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站題目:如何終結(jié)mysql中文亂碼
標(biāo)題網(wǎng)址:http://aaarwkj.com/article2/phdsic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)、云服務(wù)器、網(wǎng)站導(dǎo)航、手機(jī)網(wǎng)站建設(shè)、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)