遇到網頁或數據庫中中文顯示為問號的問題,通常是編碼設置錯誤導致。1. 修改已建表的字符集:使用 show create table 檢查表編碼,若非 utf8mb4,則執行 alter table convert to character set 轉換編碼。2. 設置 mysql 默認字符集:在配置文件中添加 client 和 mysqld 的 utf8mb4 設置,并重啟服務。3. 檢查連接層編碼:在程序連接數據庫時,確保通過 set names 或連接字符串參數指定 utf8mb4 編碼。只有當字段、表、服務器配置及連接設置均統一為 utf8mb4 時,中文亂碼問題才能徹底解決,其中最容易被忽略的是連接層的編碼配置。
遇到網頁或者數據庫里中文顯示為問號的情況,基本可以確定是編碼設置有問題。mysql 默認的編碼可能是 latin1,如果不調整成支持中文的字符集(比如 utf8mb4),存中文的時候就會出錯。
修改 MySQL 字段和表的編碼
如果你已經建好了表,但發現插入中文時報錯或顯示問號,可以先檢查字段和表的字符集設置。
-
使用如下命令查看表的字符集:
SHOW CREATE TABLE 表名;
-
如果發現不是 utf8mb4,可以通過以下語句修改:
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
這個操作會把整張表的數據轉換成新的字符集,包括字段定義也會自動更新。注意,如果數據量比較大,這一步可能會有點慢,最好在低峰期操作。
設置 MySQL 的默認字符集
光改表還不夠,因為如果 MySQL 服務器本身默認用的是 latin1,那新創建的表還是會出問題。
你可以在 MySQL 的配置文件中(通常是 /etc/my.cnf 或 /etc/mysql/my.cnf)添加或修改以下內容:
[client] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
保存后重啟 MySQL 服務,這樣以后新建的數據庫和表都會默認使用 utf8mb4 編碼了。
檢查連接層的編碼
有時候即使數據庫和表都對了,還是亂碼,這時候可能是因為連接時沒指定正確的字符集。
在程序連接數據庫的時候,例如 php、Python 或 Java,記得在連接之后執行一句:
SET NAMES 'utf8mb4';
或者在連接字符串中加上參數,比如 PHP 的 pdo 連接串可以寫成:
mysql:host=localhost;dbname=test;charset=utf8mb4
Java 的 JDBC 也可以在 URL 后面加 ?characterEncoding=UTF-8&useUnicode=true&connectionCollation=utf8mb4_unicode_ci。
基本上就這些
從字段到表,再到服務器配置和連接設置,只要這幾個環節都統一成 utf8mb4,中文顯示問號的問題應該就能解決。最常見的是漏掉了連接層的設置,或者誤以為改了表結構就夠了,其實整個鏈路都要一致才行。