我正在使用PHP脚本从外部将数据导入数据库MYSQL。从查询将我的数据库字符集编码为utf8
ALTER DATABASE DEFAULT CHARSET 'utf8';
然后我执行查询以查看所有字符集
SHOW VARIABLES LIKE 'character_set%';
输出为:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
如我们所见,
character_set_database
设置为utf8
,但是如果我从PHP脚本编写代码以将编码视为echo $charset = mysql_client_encoding($cn);
输出为
latin1
。从上面的查询中,latin1仅用于服务器。谁能告诉我我到底缺少什么,因为我无法将中文和日文字符编码到数据库中。编辑
我正在从外部导入数据库,该数据库具有中文,日语和其他不同语言的Unicode字符,如我的上网主页和嶏紞鎴戠殑。
但是当我将数据导入数据库表时,我得到了??????而不是以上字符。如何编码这些字符?它是utf-8还是16,我如何识别哪种编码将支持这些字符?
最佳答案
我认为character_set_database
只是指该数据库中所有已创建表的默认字符集。因此,将其设置为UTF8将无济于事,我建议以下几点:
每次初始化数据库连接时,我都会执行$db->query("SET NAMES 'utf8'");
谈论SET NAMES
https://stackoverflow.com/a/1650834/1221902
评论家的更多名称
能否使用适当的功能取决于MySQL / PHP版本,该功能可以更好地替代"SET NAMES 'utf8'"
查询。
SET NAMES'x'语句等效于以下三个语句:
SET character_set_client = x;
SET character_set_results = x; SET character_set_connection = x;
来自http://dev.mysql.com/doc/refman/5.1/en/charset-connection.html
MySQL 5.1(仍然有人使用5.1)
character_set_results
系统变量指示字符集
服务器将查询结果返回给客户端。这包括
结果数据(例如列值)和结果元数据(例如列)
名称。