我使用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,我如何识别哪种编码将支持这些字符?
发布于 2012-02-22 04:42:05
我认为,character_set_database只是指在该DB中创建的任何表的默认字符集。因此,将其设置为UTF8不会有帮助,我建议如下:
每次初始化数据库连接时,我都会执行$db->query("SET NAMES 'utf8'");。
谈集名https://stackoverflow.com/a/1650834/1221902
更多关于评论家的片名,
它将依赖于MySQL/PHP版本来获得合适的函数,这将是"SET NAMES 'utf8'"查询的一个更好的替代方案。
一个集合名称'x‘语句与以下三个语句等价:
集character_set_client = x;集character_set_results = x;集character_set_connection = x;
来自http://dev.mysql.com/doc/refman/5.1/en/charset-connection.html MySQL 5.1 (很多人仍然使用5.1)
--
character_set_results系统变量指示服务器向客户端返回查询结果的字符集。这包括结果数据(如列值)和结果元数据(如列名)。
发布于 2012-02-22 04:42:55
您丢失了客户端编码。
虽然上面的变量只是服务器端的变量,但是您必须使用
mysql_set_charset()正如您所说的,您使用的是过时的PHP版本,除了升级PHP/交换驱动程序之外,您唯一的选项是SET NAMES <actual data encoding>集名称查询。
事实证明,您的问题不是在设置连接编码,而是与一些神秘的“导入”。因为你没有提供任何细节,我只能猜测。
如果您要导入一些mysql转储-检查表定义。很可能字符集在那是错的。您可以通过搜索和替换简单地更改它。
https://stackoverflow.com/questions/9389150
复制相似问题