0

我正在建立一个使用“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 中显示正确的编码

SequelPro - 在 DB 中显示正确的编码

4

4 回答 4

1

正如 elvispt 提到的,检查字符集和 dbcollat​​。

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

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

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

show variables like 'collation%';
show variables like 'character%';
于 2012-07-16T23:56:23.563 回答
0

雅也和我一样。我也有这个问题。你看对了,哪个是 HEX 代码 :) 常见的解决方案是使用 UTF-8 编码文件和 UTF-8 数据库,每当你编写查询,如 SELECT 、 UPDATE 不管什么时,你必须对这个查询进行 ass。

例如:

/* 在查询前添加这一行 */

<?php
mysql_set_charset('utf8');
SELECT * FROM bla bla bla....  

?>

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

例如 。

<?php

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

?>

我希望这个例子会有所帮助。无论如何对不起我的英语不好:(

于 2012-07-16T17:30:30.277 回答
0

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

于 2012-07-16T21:43:32.087 回答
0

[已修复] - 不知道是什么导致了问题。4 小时后,我放下了受影响的桌子并非常非常小心地重建了它......

HEX() - 函数有很大帮助......!!

对不起所有..不能提供更好的洞察力。

于 2012-07-17T08:37:33.767 回答