首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编码数据库和服务器

问编码数据库和服务器
EN

Stack Overflow用户
提问于 2012-02-22 04:37:06
回答 2查看 223关注 0票数 0

我使用PHP脚本将数据从外部导入到数据库MYSQL中。从查询将我的数据库字符集编码为utf8

代码语言:javascript
复制
ALTER DATABASE DEFAULT CHARSET 'utf8';

然后,我执行了一个查询,以查看所有字符集

代码语言:javascript
复制
SHOW VARIABLES LIKE 'character_set%';

产出如下:

代码语言:javascript
复制
+--------------------------+----------------------------+
| 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中编写代码,则将编码设置为

代码语言:javascript
复制
echo $charset = mysql_client_encoding($cn);

输出为latin1。从上面的查询中,latin1只适用于服务器。有谁能告诉我,我遗漏了什么,因为我无法将我的汉字和日文字符编码到数据库中。

编辑

我正在从外部导入一个数据库,其中包含我的上网主页和嶏紞鎴戠殑等中文、日文和其他不同语言的unicode字符。但是当我将数据导入到我的数据库表时,我得到了?而不是上面的字符。如何对这些字符进行编码?是utf-8还是16,我如何识别哪种编码将支持这些字符?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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系统变量指示服务器向客户端返回查询结果的字符集。这包括结果数据(如列值)和结果元数据(如列名)。

票数 3
EN

Stack Overflow用户

发布于 2012-02-22 04:42:55

您丢失了客户端编码。

虽然上面的变量只是服务器端的变量,但是您必须使用

代码语言:javascript
复制
mysql_set_charset()

正如您所说的,您使用的是过时的PHP版本,除了升级PHP/交换驱动程序之外,您唯一的选项是SET NAMES <actual data encoding>集名称查询。

事实证明,您的问题不是在设置连接编码,而是与一些神秘的“导入”。因为你没有提供任何细节,我只能猜测。

如果您要导入一些mysql转储-检查表定义。很可能字符集在那是错的。您可以通过搜索和替换简单地更改它。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9389150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档