我正在尝试在我的数据库中保护带有重音的西类牙语单词,但它不起作用,我已经尝试过:
1) 将 conllation 从表和行更改为 utf8_spanish_ci
和 utf_unicode_ci。
2)用
添加一个header标签<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
3)添加
header("Content-Type: text/html;charset=utf-8");
在 php 标签中。
在我的笔记本电脑的 xampp 服务器中执行此操作会起作用,但是当我将数据库上传到登录怪物服务器时,它不会正确保存口音。
编辑:这是我使用的连接:
private function Connect()
{
//$this->settings = parse_ini_file("settings.ini.php");
try
{
# Read settings from INI file, set UTF8
$this->pdo = new PDO('mysql:host=localhost;dbname=xxxxx;charset=utf8', 'xxxxx', 'xxxxxx', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
# We can now log any exceptions on Fatal error.
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
# Disable emulation of prepared statements, use REAL prepared statements instead.
$this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
# Connection succeeded, set the boolean to true.
$this->bConnected = true;
}
catch (PDOException $e)
{
# Write into log
echo $this->ExceptionLog($e->getMessage());
die();
}
}
编辑:
我无法保存重音,它显示像 á = ¡ 之类的奇怪字符
最佳答案
排序规则只影响文本排序,它对存储数据的实际字符集没有影响。
我会推荐这个配置:
仅为整个数据库设置字符集,因此您不必为每个表单独设置它。字符集从数据库继承到表到列。使用
utf8
作为字符集。设置数据库连接的字符集。连接到数据库后执行这些查询:
SET CHARACTER SET 'utf8' SET NAMES 'utf8'
使用 HTTP header 和/或 HTML 元标记为页面设置字符集。其中一个就足够了。使用
utf-8
作为charset
。
这应该足够了。
如果您希望对西类牙语字符串进行正确排序,请为整个数据库设置排序规则。 utf8_spanish_ci
应该有效(ci
表示不区分大小写)。如果没有正确的排序,带有重音的西类牙文字符将始终排在最后。
注意:您表中已有数据的字符集可能已损坏,因为您之前的字符集配置有误。您应该首先使用一些数据库客户端检查它以排除这种情况。如果它损坏了,只需使用正确的字符集配置重新插入您的数据。
如何character set在数据库中工作
objects有一个字符集属性,可以显式设置或继承(服务器>数据库>表>列),所以最好的选择是为整个数据库设置它
client connection还有一个字符集属性,它告诉数据库您发送数据时使用的编码
如果客户端连接和目标对象的字符集不同,您发送到数据库的数据会自动从连接的字符集转换为对象的字符集。
因此,例如,如果您有 utf8
中的数据,但是 client connection 设置为 latin1
,数据库将破坏数据,因为它会尝试将 utf8
转换为 latin1
。
关于php - 如何处理数据库中的重音符号和奇怪的字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33219970/