我正在使用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系统变量指示字符集
  服务器将查询结果返回给客户端。这包括
  结果数据(例如列值)和结果元数据(例如列)
  名称。

07-28 03:21
查看更多