[英]Which collation should I use to store these country names in MySQL?
我正在尝试在mySQL数据库中存储国家/地区列表。
我在存储以下非英语名称时遇到问题:
它们与奇怪的字符一起存储在数据库中,(因此在我的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'
所以那不是这里的问题。
如果您在任何地方都使用uf8 *,它将起作用-好像您忘记了任何东西
*无处不在意味着: 对于数据库排序规则和-连接,对于(php?)脚本文件,以及对于发送到浏览器的页面(通过设置元标记或更好地设置uftf-8标头)
实际上, collation
不会影响任何种类。 这是用于排序和比较的东西,而不是重新编码的东西。
它负责字符本身的encoding
。
因此,您的问题不是来自表排序规则,而是来自连接编码
SET NAMES utf8
查询应该解决问题,至少可以为新插入的数据
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.