MySQL和CI的UTF8数据问题

时间:2012-07-16 17:21:33

标签: php mysql codeigniter utf-8 character-encoding

我正在建立一个快速网站,使用“geoanems”数据库为世界各地的地方。我正在使用Mysql,PHP和CodeIgniter,但我遇到了UTF8地名的问题。我已导入数据库,所有内容都使用UTF-8进行设置。

但是,我正在进行一项简单的测试,看看我是否可以正确地在浏览器中获取名称,而且我一直都被问号所困扰。 MySQL显示了1123230名称和sname的正确十六进制,但是相同的字符“C481”在1127766的sname中被删除并被“3F”替换。

发生了什么事?看到这是运行十六进制的MySQL,为什么它改变了值? 另外,如果我能看到它排成一排,为什么不能看到另一排呢?

我已经为UTF8设置了服务器,并在MySQL上运行检查,看看是否设置正确。这在CodeIgniter中不起作用:(。我还发送了“SET NAMES'UTF8'”, 但仍然没有快乐。

这是SQL:

$sql = 'select geonameid,name,sname, hex( name ) ,hex( sname ) from pp_adm1 where country = "af" COLLATE utf8_general_ci';

enter image description here

Sequel Pro - 在DB中显示正确的编码

SequelPro - Showing Correct Encoding in DB

4 个答案:

答案 0 :(得分:1)

如上所述,检查charset和dbcollat​​。

以下链接将有助于转换mysql的charset(如果那就是问题)

http://www.bdunagan.com/2011/09/29/converting-mysql-from-latin1-to-utf8/

要验证字符集和排序规则,您始终可以查询MySQL变量:

show variables like 'collation%';
show variables like 'character%';

答案 1 :(得分:0)

雅也和我一样。我也有这个问题。你看到正确的是HEX代码:)常见的解决方案是使用带有UTF-8数据库的UTF-8编码文件,每当你编写SELECT,UPDATE等查询时,你必须对这个查询进行查询。

对于Exmaple:

/ *在查询* /

之前添加此行
<?php
mysql_set_charset('utf8');
SELECT * FROM bla bla bla....  

?>

还有一件事我想告诉你,每当你连接数据库时,都会添加相同的东西。

例如。

<?php

mysql_set_charset('utf8');
mysql_connect('localhost','root','');
mysql_select_db('yourDatabase');

?>

我希望这些例子能有所帮助。无论如何对不起我的坏英语:(

答案 2 :(得分:0)

检查database.php中的charsetdbcollat配置参数。检查数据库和CI上的字符集是否相同。 检查php.ini default_charset也不会有什么坏处。

答案 3 :(得分:0)

[固定] - 不知道导致问题的原因。 4小时和我,DROP'd受影响的桌子,并非常仔细地重建...

HEX() - 功能很有帮助...... !!

对不起所有..不能提供更好的见解。