我正在使用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);
输出为CCD_ 3。根据以上查询,latin1仅用于服务器。有人能告诉我我到底缺了什么吗?因为我无法将我的中文和日文字符编码到数据库中。
编辑
我正在从外部导入一个数据库,该数据库的unicode字符为我的上网主页和嶏紞鎴戠殑中文、日语和其他不同的语言。但当我将数据导入数据库表时,我会得到?????而不是上面的字符。我如何对这些字符进行编码?它是utf-8还是16,我如何识别哪种编码将支持这些字符?
character_set_database
只是指该DB中任何已创建表的默认字符集,我认为。因此,将其设置为UTF8并没有帮助,我建议如下:
每次初始化数据库连接时,我都会执行$db->query("SET NAMES 'utf8'");
谈论集合名称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.htmlMySQL5.1(很多人仍然使用5.1)
character_set_results
系统变量表示字符集其中服务器向客户端返回查询结果。这包括结果数据(如列值)和结果元数据(如列姓名。
您缺少客户端编码
虽然上述变量只是服务器端的变量,但您必须使用设置客户端编码
mysql_set_charset()
正如您所说,您使用的是过时的PHP版本,除了升级PHP/切换驱动程序之外,您唯一的选择是SET NAMES <actual data encoding>
集合名称查询。
事实证明,你的问题不是设置连接编码,而是一些神秘的"导入"。由于你没有提供任何细节,我只能猜测
如果您正在导入一些mysql-dump,请检查表定义。字符集很可能是错误的。你可以简单地通过搜索来改变它;代替