MySQL 5.6中文問號(“????”)的問題已經困擾很多人了。這個問題出現在插入和查詢中,尤其是在處理中文字符時會出現。下面我們通過代碼來探究問題的原因和解決方法。
-- 創建數據庫 CREATE DATABASE testdb; -- 創建表 CREATE TABLE users ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(20) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- 插入數據,使用“?”替換中文字符 INSERT INTO users(name) VALUES ('張三'),('李四'),('王五'),('趙六'),('小明'),('小紅'),('小剛'),('小麗'); -- 查詢數據 SELECT * FROM users;
上面的代碼創建了一個名為testdb的數據庫,并在其中創建了一個名為users的表,其中包含一個id和一個name字段。我們可以看到,在INSERT INTO語句中,我們使用“?”來代替中文字符。當我們執行SELECT語句時,我們會看到結果中的中文字符被替換成了“????”。
這個問題的原因是MySQL默認是使用utf8編碼,它只支持3個字節的UTF-8字符,而4個字節的UTF-8字符是不支持的。而一些中文字符恰好是4個字節的,因此在MySQL中處理中文字符時就會出現問題。
解決方法是將MySQL的字符集設置為utf8mb4,該字符集支持4個字節的UTF-8字符。修改MySQL的配置文件my.cnf(在Linux中一般在/etc/mysql目錄下),將以下內容添加到[mysqld]部分:
[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
配置完畢后,我們需要重啟MySQL才能生效。重啟完畢后,我們可以再次執行上面的代碼,可以發現問題已經得到解決,我們能夠正確地看到中文字符了。
上一篇css塊中z-index
下一篇css坐標平移