php - 如何处理数据库中的重音符号和奇怪的字符?

标签 php mysql database utf-8

我正在尝试在我的数据库中保护带有重音的西类牙语单词,但它不起作用,我已经尝试过:

1) 将 conllation 从表和行更改为 utf8_spanish_ciutf_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();
        }
    }

编辑:

我无法保存重音,它显示像 á = ¡ 之类的奇怪字符

最佳答案

排序规则只影响文本排序,它对存储数据的实际字符集没有影响。

我会推荐这个配置:

  1. 仅为整个数据库设置字符集,因此您不必为每个表单独设置它。字符集从数据库继承到表到列。使用utf8作为字符集。

  2. 设置数据库连接的字符集。连接到数据库后执行这些查询:

    SET CHARACTER SET 'utf8'
    SET NAMES 'utf8'
    
  3. 使用 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/

相关文章:

php - 限制对 amazon s3 文件的访问,只允许登录用户访问

php - 根据 POST 数据重新加载表

android - 在 listView 中反转整个列表

database - 创建高效的 Oracle/PL_SQL 查询帮助

php - 为每个文件创建上传状态 JQuery 和 AJAX

php - 在 PHP 中比较对象是否相等

javascript - 尝试将选项添加到MySQL表的数据列表中,但选项并不总是显示(Node.js)

mysql选择

mysql - 选择另一个 ID 数量最多的 ID

javascript - Qt访问Websql数据库