€;不使用mysql查询显示字符

€;不使用mysql查询显示字符,mysql,sql,character-encoding,Mysql,Sql,Character Encoding,我正在开发一个Wordpress插件,出于一个奇怪的原因,我使用char€将字符串正确地保存在数据库中,但是为了显示它,即使我没有使用Wordpress方式处理$wpdb,但是像这样(注意:这段代码只是为了检查它是否是一个更深层次的问题,而不是使用它): 在字符串值中显示?而不是€ 重要通知 我对char$没有这个问题 char€正确存储在数据库中,我可以在PHPMyAdmin内的表值中看到它 有人有主意了?这是一个字符编码问题。字符由数字表示,有许多字符编码表示什么数字就是什么字符 代码中包含

我正在开发一个Wordpress插件,出于一个奇怪的原因,我使用char
将字符串正确地保存在数据库中,但是为了显示它,即使我没有使用Wordpress方式处理
$wpdb
,但是像这样(注意:这段代码只是为了检查它是否是一个更深层次的问题,而不是使用它):

在字符串值中显示
而不是

重要通知

  • 我对char
    $
    没有这个问题
  • char
    正确存储在数据库中,我可以在PHPMyAdmin内的表值中看到它
    有人有主意了?

    这是一个字符编码问题。字符由数字表示,有许多字符编码表示什么数字就是什么字符

    代码中包含三种可能不同的编码。数据库的编码、PHP的编码和网页的编码。他们都应该就他们使用的编码方式达成一致。或者他们必须知道其他人正在使用什么编码并正确转换

    ??表示网页正在使用的字符集中没有对应字符的数字。$在许多字符集中都是相同的,因此它对编码错误不太敏感。欧元通常是不同的,因此它对编码错误很敏感

    将文本从一个系统传递到另一个系统的任何一点都可能会损坏文本。将网页中的文本传递到PHP中,将PHP中的文本插入数据库,将数据库中的文本提取到PHP中,并将PHP中的文本发送到网页

    最简单的方法是确保它们都使用UTF-8,这是最常见的编码,可以处理几乎每个字符

    这个PHP圆桌会议将引导您解决问题。还有你的答案

    您可以通过以下方式检查数据库字符集

    最后,检查网页的字符编码。在大多数浏览器中,这将出现在“页面信息”中。例如,堆栈溢出的文本编码为UTF-8



    注意:不要使用字符串连接将值放入SQL查询中。它的bug更少,更安全。

    使用它,您可以将字符集添加到连接性0n中。 它和你的测试一样。但是安全的TechCharacterSet是utf8mb4,因为这是我的默认设置。可能是你必须根据自己的需要改变

    $mysqli= new mysqli("host", "username", "password", "dbname");
    $mysqli->set_charset("utf8mb4");
    $query = "SELECT option_value FROM wp_options WHERE option_name = ? LIMIT 1";
    $stmt = $mysqli->prepare($query );
    $stmt->bind_param("si", $this->current_options_name);
     $stmt->execute();
     $result = $stmt->get_result();
     if($result->num_rows === 0) {
       echo '0 results'; 
      } else {
        while($row = $result->fetch_assoc()) {
         var_dump($row);
        }
      }
    
    $stmt->close();
    

    例如,必须始终使用utf8,所以请检查数据库表列和连接字符串。当您使用als方法时,请参阅另一个想法:不要存储€,£,$。在单独的列中存储标准代码(欧元、英镑、美元),并在应用程序中处理显示code@nbk是的,数据库在'utf8_general_ci'-在
    wp config.php
    中,我得到了
    define('DB_CHARSET','utf8')如果一切都是utf8,我会检查连接,数据库中的数据有缺陷请参阅“问号”,谢谢您的回答,我会查看。执行查询的这段代码只是为了了解发生了什么,我将使用
    $wpdb
    来实现这一点。因此,在这种情况下,我应该将“UTF-8”字符集更改为“utf8mb4”?使用uft8mb4进行尝试,但在mysql服务器中,您应该可以看到您所拥有的内容,但当然,您可以另外定义一个表和列;)@J.BizMai
    utf8mb4
    仍然是UTF-8。这是一个特殊的MySQL版本。MySQL的
    utf8
    无法容纳所有UTF-8字符<代码>utf8mb4
    can。但两者都可以持有欧元。看见
    $mysqli= new mysqli("host", "username", "password", "dbname");
    $mysqli->set_charset("utf8mb4");
    $query = "SELECT option_value FROM wp_options WHERE option_name = ? LIMIT 1";
    $stmt = $mysqli->prepare($query );
    $stmt->bind_param("si", $this->current_options_name);
     $stmt->execute();
     $result = $stmt->get_result();
     if($result->num_rows === 0) {
       echo '0 results'; 
      } else {
        while($row = $result->fetch_assoc()) {
         var_dump($row);
        }
      }
    
    $stmt->close();