許多初學(xué)者在使用mysql數(shù)據(jù)庫時都會遇到字符顯示成問號的問題。這種問題經(jīng)常出現(xiàn)在中文字符集中,但也有可能出現(xiàn)在其他字符集中。
例如,我們在mysql中創(chuàng)建一個含有中文字符的表:CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `age` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
在插入中文字符時,我們會發(fā)現(xiàn)字符顯示成了問號:
INSERT INTO `user` (`name`, `age`) VALUES ('張三', 20);
這是因為mysql默認使用的字符集是latin1,而我們創(chuàng)建的表是使用utf8mb4字符集。為了解決這個問題,我們需要設(shè)置mysql使用正確的字符集。
在連接mysql時,我們可以在連接字符串中指定字符集,例如:
$conn = mysqli_connect("localhost", "username", "password", "database", "3306", null,MYSQLI_CLIENT_FOUND_ROWS|MYSQLI_CLIENT_IGNORE_SPACE); mysqli_set_charset($conn, 'utf8mb4');
另外,也可以在mysql配置文件中設(shè)置默認字符集:
[mysqld] ... character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci ...
通過以上方法,我們就能夠正確地插入和查詢含有中文字符的數(shù)據(jù)。