php与mysql查询数据是问号_UTF8发布PHP-> MySQL。 在数据库中获取问号?

好的,我目前处于PHP / MySQL / UTF-8 / Unicode地狱!

我的环境:

的MySQL:5.1.53

服务器字符集:latin1

DB字符集:latin1

客户特征集:latin1

康涅狄格州字符集:latin1

的PHP:5.3.3

我的PHP文件保存为UTF-8格式,而不是ASCII文件。

在建立数据库连接时,在我的PHP代码中执行以下操作:

ini_set('default_charset', 'utf-8');

$my_db = mysql_connect(DEV_DB, DEV_USER, DEV_PASS);

mysql_select_db(MY_DB);

// I have tried both of the following utf8 connection functions

// mysql_query("SET NAMES 'utf8'", $my_db);

mysql_set_charset('utf8', $my_db);

// Detect if form value is not UTF-8

if (mb_detect_encoding($_POST['lang_desc']) == 'UTF-8') {

$lang_description = $_POST['lang_desc'];

} else {

$lang_description = utf8_encode($_POST['lang_desc']);

}

$language_sql = sprintf(

'INSERT INTO app_languages (language_id, app_id, description) VALUES (%d, %d,"%s")',

intval($lang_data['lang_id']),

intval($new_app_id),

mysql_real_escape_string($lang_description, $my_db)

);

我的MySQL数据库的格式/创建是:

CREATE TABLE IF NOT EXISTS app_languages (

language_id int(10) unsigned NOT NULL,

app_id int(10) unsigned NOT NULL,

description tinytext collate utf8_unicode_ci,

PRIMARY KEY (language_id,app_id)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

从我的PHP代码生成的SQL语句如下所示:

INSERT INTO app_languages (language_id, app_id, description) VALUES (91, 2055,"阿拉伯体育新闻和信息")

INSERT INTO app_languages (language_id, app_id, description) VALUES (26, 2055,"阿拉伯體育新聞和信息")

INSERT INTO app_languages (language_id, app_id, description) VALUES (56, 2055,"?????? ????? ????? ?????")

INSERT INTO app_languages (language_id, app_id, description) VALUES (69, 2055,"アラビア語のスポーツニュースと情報")

但是,输出在我的数据库中显示为:

|          69 |   2055 | ?????????????????                               |

|          56 |   2055 | ?????? ????? ????? ?????                        |

|          28 |   2055 | Arapski sportske vijesti i informacije          |

|          42 |   2055 | Arabe des nouvelles sportives et d\'information |

|          91 |   2055 | ??????????                                      |

我究竟做错了什么??

附言 我们可以使用Putty直接通过SSH SSH到数据库服务器,并通过命令行粘贴unicode /多语言插入语句之一。 他们成功地工作了!

感谢您对此的理解,这使我发疯。

干杯,杰森

选择数据库后,尝试执行以下查询:

SET NAMES 'utf8'

此查询应使用文件和数据库中的不同字符集解决问题。

费利克斯

非常感谢。 您的回答解决了我的严重问题。

好答案。 我有同样的问题,所以它解决了我的问题。 非常感谢

答案是正确的在您的问题。 您在整个数据库中都使用latin1,它无法处理unicode。 您还需要将其更改为UTF-8。

不,那是不正确的,因为您会在我的评论中看到" P.S.我们可以使用Putty通过命令行直接通过SSH SSH到数据库服务器,粘贴unicode /多语言insert语句之一。它们成功地工作了!!"

@Jason您确定腻子使用的是正确的编码吗? thegreyblog.blogspot.com/2009/08/

@bobo,是的,那正是Putty如何处理编码的方式,它是UTF-8。

我看到您将其视为???????的单词是阿拉伯语单词..必须具有排序规则

cp1256_general_ci

UTF-8_general_ci

改变它,可能会解决问题。

除非您已经知道要处理的内容,否则mb_detect_encoding几乎没有用。 除非您指定第二个和第三个参数,否则您可能不应该依赖它。 当前,它可能不会返回您认为的结果。

//first make sure your file produce utf-8 chars

header('Content-Type: text/html; charset=utf-8');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值