許多MySQL用戶都曾遭遇過(guò)這樣的問(wèn)題:當(dāng)在MySQL數(shù)據(jù)庫(kù)中插入含有中文字符的數(shù)據(jù)時(shí),會(huì)出現(xiàn)“?”或“??”等問(wèn)號(hào)代替中文字符的情況,這對(duì)于中文內(nèi)容的建立和查詢帶來(lái)了很大的不便。
這種問(wèn)題的出現(xiàn)原因主要是因?yàn)镸ySQL數(shù)據(jù)庫(kù)默認(rèn)使用的字符集為L(zhǎng)atin1,這種字符集并不支持中文字符,因此當(dāng)插入含有中文字符的數(shù)據(jù)時(shí),MySQL數(shù)據(jù)庫(kù)無(wú)法正確識(shí)別并存儲(chǔ),導(dǎo)致亂碼問(wèn)題的出現(xiàn)。
要解決這個(gè)問(wèn)題,我們需要使用正確的字符集來(lái)存儲(chǔ)和查詢中文字符。在MySQL5.5及以后的版本中,官方推薦使用UTF-8字符集來(lái)支持中文字符,因?yàn)閁TF-8字符集可以支持全球范圍內(nèi)所有的語(yǔ)言和字符。
/* 使用UTF-8字符集創(chuàng)建表格 */ CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, `age` int(11) DEFAULT NULL, `gender` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
在創(chuàng)建表格時(shí),我們需要使用COLLATE參數(shù)來(lái)指定字符集,這里我們使用UTF-8字符集,同時(shí)也需要將表格中每個(gè)字段的字符集也設(shè)置為UTF-8。
此外,在插入中文字符的時(shí)候,我們也需要將插入的字符集轉(zhuǎn)換為UTF-8格式,例如:
/* 向表格中插入中文字符 */ INSERT INTO `user_info` (`name`, `age`, `gender`) VALUES ('張三', '20', '男');
如此一來(lái),我們就可以避免中文亂碼問(wèn)題的發(fā)生,并且正確地存儲(chǔ)和查詢中文字符。