这个报错翻译过来是“发送了未知字符集”,但是不明白怎么解决

img


每回mysql与数据库连接都会显示这个,要怎么解决呢?
数据库,php字符集都设置的gb2312,为什么还是不可以呢?

  1. 检查你的MySQL字符串编码配置,是否是UTF-8编码

    img

  2. 检查你的PHP链接是否是UTF-8编码
    // 设置编码格式
    mysql_query("set names utf8");
    // 有的是
    mysql_query($conn,"set names utf8");
    
  3. 检查你的页面编码是否是UTF-8
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    

mysql默认字符集是utf8,不建议你使用GB2312,因为前者是国际标准,你打开PHPmyAdmin接校对应该是utf8_unicode_ci,创建新的数据库时整理一栏也试一试选成utf8_unicode_ci。

img

img

源于chatGPT仅供参考,如有帮助,望采纳谢谢!

这个错误可能是由于数据库与 PHP 的字符集不匹配引起的。请尝试以下解决方案:

1. 确认数据库字符集设置:确保数据库的字符集设置是正确的,应使用与 PHP 一致的字符集(如UTF-8)。您可以通过执行以下SQL语句来更改数据库字符集:
```sql
ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_general_ci;

your_database_name 替换为实际的数据库名称。

  1. 检查数据库连接字符集:在 PHP 中,使用 mysqli_set_charset() 函数或者 PDO 设置数据库连接字符集,确保它与数据库的字符集一致。例如:
    ```php
    // 使用 mysqli 连接数据库的示例
    $connection = mysqli_connect("host", "username", "password", "database");
    mysqli_set_charset($connection, "utf8");

// 使用 PDO 连接数据库的示例
$dsn = "mysql:host=host;dbname=database;charset=utf8";
$pdo = new PDO($dsn, "username", "password");


3. 确认PHP文件字符集设置:确保您的PHP文件本身以及Web服务器配置中的默认字符集也与数据库的字符集一致。您可以在代码的顶部加入以下代码来设置PHP文件的字符集:
```php
header('Content-Type: text/html; charset=utf-8');
  1. 如果以上步骤都没有解决问题,尝试在连接数据库之前执行以下命令来设置会话字符集:
    ```php
    // 使用 mysqli 连接数据库时设置会话字符集
    mysqli_query($connection, "SET NAMES 'utf8'");

// 使用 PDO 连接数据库时设置会话字符集
$pdo->exec("SET NAMES 'utf8'");


请注意,在执行这些操作之后,您可能需要重启Web服务器和数据库以使更改生效。如果问题仍然存在,请检查您的Web服务器和PHP配置是否正确,并确保数据库中存储的数据与所需的字符集相匹配。

我之前也遇到过,网上查询得知MySQL 8 默认字符集为utf8mb4,
给出的解决方法都是设置MySQL的默认字符集为老版本的utf8,
然而其实只需要在MySQL配置文件中[mysqld]下加这两行

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
同时在TP配置文件中的数据库连接信息中指明字符集utf8即可

'DB_CHARSET'=> 'utf8', // 字符集

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7806638
  • 你也可以参考下这篇文章:如何解决本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止(如果你在网上找了方法都不行,可以试试这个)
  • 你还可以看下mysql参考手册中的 MySQL 备份和恢复 将一个数据库从一个服务器复制到另一个服务器
  • 除此之外, 这篇博客: 【肝了三天-建议收藏】实战-万字长文-带你刨析MySQL乱码、字符集和比较规则中的 🥝 (三)GBXXXX字符集 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  (1) GB2312字符集:

    • 全称:《信息交换用汉字编码字符集》,刚开始ASCII字符集只包含了阿拉伯数字、字母和一些特殊符号,这个编码只适用于美国和西方的一些国家,而不适用于使用汉字的国家,为了使用汉字的国家也能够和计算机进行沟通,中国国家标准总局发布了标准号为:GB2312的编码格式,它适用于汉字处理、汉字通信等系统之间的信息交换,除了中国大陆使用外,新加坡等地也采用此编码(中国雄起!)。

    • GB2312字符集共收录了6763个简体汉字,它的收录包括了拉丁字母、日文平假名等在内的682个全角字符,GB2312编码可以将GB2312字符集包含的字符转换成计算机能够识别的二进制0和1。

    • 特点: 因为它兼容了ASCII字符集,所以在编码方式上存在多种情况,如果字符属于ASCII字符集中的字符的话,则编码时需要使用1个字节进行编码,如果不属于ASCII字符集,则需要使用2个字节进行编码。

     (2)GBK字符集

    • 全称:《汉字内码扩展规范》,因为GB2312字符集编码只支持简体汉字和一些特殊符号,繁体字和一个特殊简体字都没有收录其中,所以微软针对GB2312做了拓展,在GBK字符集中收录了繁体字,并最早在Window95简体中文版使用。

    • GBK拓展了GB2312字符集,共收录了两万多个文字,GBK编码可以将GBK字符集收录的字符转换成计算机能够识别的二进制0和1。

     (3)GB18030字符集

    • 全称: 国家标准GB 18030-2005《信息技术 中文编码字符集》,因为GBK是由微软首先制定的,并不属于国家标准,所以国家为了兼容GBK字符集制定了GB18030字符集,它是中华人民共和国现时最新的内码字集,除了兼容GBK字符集外,还支持GB 13000及Unicode字符集的全部统一汉字。

    • GB 18030字符集共收录汉字七万多个,并且存储方式采用的是可变长字节编码,每个字可以由1个、2个或4个字节组成。

  • 您还可以看一下 陈贺群老师的软件测试教程系列之MySQL数据库教学视频(中)课程中的 数据库_约束-外键约束介绍小节, 巩固相关知识点

如果PHP和MySQL的字符集都设置为gb2312,会导致中文乱码。原因如下:

  1. gb2312字符集过旧,无法支持大部分中文字符,只支持简体中文的一部分字符。
  2. PHP和MySQL的字符集不匹配,会导致数据在解析过程中乱码。

解决方案: 将PHP和MySQL的字符集修改为utf8mb4