對于許多MySQL用戶,在查詢數(shù)據(jù)存入數(shù)據(jù)庫時可能經(jīng)常遇到亂碼問題。MySQL存入亂碼的原因有很多,比如數(shù)據(jù)庫字符集與客戶端字符集不一致、應用服務器與數(shù)據(jù)庫服務器字符集不同、數(shù)據(jù)庫中文字段沒有設置utf8字符集等等。下面我們來逐一解析具體原因,并給出相應解決方法。
// 示例代碼: $mysqli = new mysqli("localhost","username","password","database"); if(mysqli_connect_errno()){ printf("連接數(shù)據(jù)庫失敗:%s\n",mysqli_connect_error()); exit; } $mysqli->set_charset("utf8");//設置字符集 $sql = "INSERT INTO table_name (field1,field2) VALUES ('value1','value2')"; $result = $mysqli->query($sql); if(!$result){ printf("插入數(shù)據(jù)失敗:%s\n",$mysqli->error); exit; } $mysqli->close();
1、數(shù)據(jù)庫字符集與客戶端字符集不一致
解決方法:先查詢當前使用的字符集,再把客戶端和數(shù)據(jù)庫服務器的字符集都設置成相同的,如下:
// 查詢數(shù)據(jù)庫字符集 SHOW VARIABLES LIKE 'character_set_database'; // 查詢客戶端字符集 SHOW VARIABLES LIKE 'character_set_client'; // 設置客戶端字符集 SET character_set_client = utf8; // 設置數(shù)據(jù)庫字符集 ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_general_ci;
2、應用服務器與數(shù)據(jù)庫服務器字符集不同
解決方法:在應用服務器連接MySQL數(shù)據(jù)庫時指定字符集,如下:
$mysqli = new mysqli("localhost","username","password","database"); if(mysqli_connect_errno()){ printf("連接數(shù)據(jù)庫失敗:%s\n",mysqli_connect_error()); exit; } $mysqli->set_charset("utf8");//設置字符集
3、數(shù)據(jù)庫中文字段沒有設置utf8字符集
解決方法:把數(shù)據(jù)庫表中的中文字段都設置成utf8字符集。
通過上述方法,MySQL查詢存入亂碼的問題應該可以解決了。當然,具體解決方法要根據(jù)實際情況而定。