在MySQL 5.5及以下版本中,有時候在中文查詢時會遇到問號的問題。這個問題通常發生在在數據庫字符集為UTF-8,而應用字符集為GBK或GB2312的情況下。
例如,我們以GB2312的字符集向MySQL插入一條數據: INSERT INTO mytable (name) VALUES ('洛杉磯'); 如果數據庫字符集為UTF-8,我們再以UTF-8查詢這個數據: SELECT * FROM mytable WHERE name='洛杉磯'; 此時,MySQL就無法識別這個中文字符,于是查詢結果返回一個問號: +----+------------+ | id | name | +----+------------+ | 1 | ? | +----+------------+
那么如何解決這個問題呢?
第一種解決方案是將應用字符集改成UTF-8,這樣就不會出現亂碼了。
第二種解決方案是在連接MySQL時設置連接字符集。如果使用的是PHP連接MySQL,可以在mysqli_connect函數中使用如下代碼來設置連接字符集:
$link = mysqli_connect($host, $user, $password, $database); mysqli_set_charset($link, "utf8");
其他編程語言也都有類似的設置字符集的方法。
第三種解決方案是在MySQL中設置字符集,具體如下:
1. 打開my.cnf文件(Ubuntu上默認位置是/etc/mysql/my.cnf,CentOS上默認位置是/etc/my.cnf) 2. 找到[mysqld]下的字符集設置,并將其設置為UTF-8: [mysqld] character_set_server=utf8 3. 重啟MySQL服務,使設置生效。 這樣,以任意字符集查詢MySQL中的中文數據時,就不會再出現問號亂碼了。