mysql 創(chuàng)建數(shù)據(jù)庫(kù)時(shí)指定編碼很重要,很多開(kāi)發(fā)者都使用了默認(rèn)編碼,亂碼問(wèn)題可是防不勝防。制定數(shù)據(jù)庫(kù)的編碼可以很大程度上避免倒入導(dǎo)出帶來(lái)的亂碼問(wèn)題。
網(wǎng)頁(yè)數(shù)據(jù)一般采用UTF8編碼,而數(shù)據(jù)庫(kù)默認(rèn)為latin 。我們可以通過(guò)修改數(shù)據(jù)庫(kù)默認(rèn)編碼方式為UTF8來(lái)減少數(shù)據(jù)庫(kù)創(chuàng)建時(shí)的設(shè)置,也能最大限度的避免因粗心造成的亂碼問(wèn)題。
我們遵循的標(biāo)準(zhǔn)是,數(shù)據(jù)庫(kù),表,字段和頁(yè)面或文本的編碼要統(tǒng)一起來(lái)
我們可以通過(guò)命令查看數(shù)據(jù)庫(kù)當(dāng)前編碼: mysql> SHOW VARIABLES LIKE 'character%';
發(fā)現(xiàn)很多對(duì)應(yīng)的都是 latin1,我們的目標(biāo)就是在下次使用此命令時(shí)latin1能被UTF8取代。
第一階段:
mysql設(shè)置編碼命令
復(fù)制代碼代碼如下:
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;
然后 mysql> SHOW VARIABLES LIKE 'character%'; 你可以看到全變?yōu)?utf8 。
但是,這只是一種假象
此種方式只在當(dāng)前狀態(tài)下有效,當(dāng)重啟數(shù)據(jù)庫(kù)服務(wù)后失效。
所以如果想要不出現(xiàn)亂碼只有修改my.ini文件,
從my.ini下手(標(biāo)簽下沒(méi)有的添加,有的修改)
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
以上3個(gè)section都要加default-character-set=utf8,平時(shí)我們可能只加了mysqld一項(xiàng)。
然后重啟mysql,執(zhí)行
mysql> SHOW VARIABLES LIKE 'character%';
確保所有的Value項(xiàng)都是utf8即可。
但是可惡的事情又來(lái)了,
|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_set_server | latin1 無(wú)法設(shè)置成UTF8 交互時(shí)候仍然會(huì)出現(xiàn)亂碼。
第二階段:找到下面這東東
X:\%path%\MySQL\MySQL Server 5.0\bin\MySQLInstanceConfig.exe
重新啟動(dòng)設(shè)置,將默認(rèn)編碼設(shè)置為utf8.這樣就能達(dá)到我們所要的效果了。
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 | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set
另外注意事項(xiàng):
1、建表時(shí)加utf8,表字段的Collation可加可不加,不加時(shí)默認(rèn)是utf8_general_ci了。
復(fù)制代碼代碼如下:
CREATE TABLE `tablename4` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`varchar1` varchar(255) DEFAULT NULL,
`varbinary1` varbinary(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
2、網(wǎng)頁(yè)xxx.php/jsp保存時(shí)選擇utf8編碼,頁(yè)頭最好加上
header('conten-type:text/html;charset=utf-8');
在執(zhí)行CRUD操作前先執(zhí)行一下
mysql_query("set names utf8");
-------------------------
連接數(shù)據(jù)庫(kù)設(shè)置編碼
jdbc:mysql://地址:3306/數(shù)據(jù)庫(kù)名?characterEncoding=utf8
-------------------------
java中的常用編碼UTF-8;GBK;GB2312;ISO-8859-1;
對(duì)應(yīng)mysql數(shù)據(jù)庫(kù)中的編碼utf8;gbk;gb2312;latin1