我正在尝试在mySQL数据库中存储国家/地区列表。
我在存储(非英语)名称时遇到问题:
它们在db中存储有奇怪的字符(因此在我的HTML页面中奇怪地输出)。
我尝试为数据库和MySQL连接排序规则使用不同的排序组合:
“明显”设置是对数据库和连接信息使用utf8_unicode_ci。令我惊讶的是,这并没有解决问题。
有谁知道如何解决这个问题?
[编辑]
事实证明,问题与排序无关,而是与col所指出的编码有关。我注意到在命令行中,我可以输入两个单独的命令:
SET NAMES utf8
followed by
[QUERY]
其中[QUERY]是我的SQL语句,用于检索名称,并且有效(名称不再受损)。但是,当我以编程方式(即通过代码)执行相同的操作时,我仍然会得到损坏的名称。我尝试将这两个语句结合起来:
SET NAMES utf8; [QUERY]
再次,在命令行中,返回正确的字符串。再一次,当我通过代码尝试相同的语句时,我得到了错误的值。
这是我的代码的代码片段:
$mysqli = self::get_db_connection();
$mysqli->query('SET NAMES utf8');
$sql = 'SELECT id, name FROM country';
$results = self::fetch($sql);
the fetch method is:
private static function fetch($query)
{
$rows = array();
if (!empty($query))
{
$mysqli = self::get_db_connection();
if ($mysqli->connect_errno)
{
self::logError($mysqli->connect_error);
}
else
{
if ($result = $mysqli->query($query))
{
if(is_object($result)){
while ($row = $result->fetch_array(MYSQLI_ASSOC))
$rows[] = $row;
$result->close();
}
}
}
}
return $rows;
}
任何人都可以发现我的错误吗?
为了澄清,页面中的HTTP标头设置正确 'Content-type':'text / html;字符集= UTF-8'
所以这不是问题。
答案 0 :(得分:1)
如果你在任何地方使用uf8 *它会起作用 - 似乎你忘了什么
*无处不在意味着:用于数据库整理和连接,用于(php?)脚本文件以及发送到浏览器的页面(通过设置元标记或更好地设置uftf-8头)
答案 1 :(得分:1)
事实上,collation
不会影响任何形式。这是用于订购和比较的东西,而不是重新编码。
encoding
负责角色本身。
因此,您的问题不是来自表格排序,而是来自连接编码
SET NAMES utf8
查询应该解决问题,对于新插入的数据