我正在建立一个快速网站,使用“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';
Sequel Pro - 在DB中显示正确的编码
答案 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)
对于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中的charset
和dbcollat
配置参数。检查数据库和CI上的字符集是否相同。
检查php.ini default_charset
也不会有什么坏处。
答案 3 :(得分:0)
[固定] - 不知道导致问题的原因。 4小时和我,DROP'd受影响的桌子,并非常仔细地重建...
HEX() - 功能很有帮助...... !!
对不起所有..不能提供更好的见解。