Skip to content
📈0️⃣

MySQL 数据库无法正确写入汉字 emoji 等字符

命令 set names utf8mb4;

SET NAMES utf8mb4; 是一个 MySQL 中的 SQL 命令,其作用是设置当前会话的字符集为 utf8mb4,即使用 utf8mb4 字符集进行数据存储和通信。这个命令在处理包含 emoji 表情或四字节 UTF-8 字符(如一些特殊的中文字符)的数据时非常有用。

具体作用包括:

  1. 支持存储 emoji 表情:utf8mb4 是能够存储 emoji 表情的字符集,如果数据库中需要存储或处理包含 emoji 的文本数据,就必须将字符集设置为 utf8mb4。
  2. 支持四字节 UTF-8 字符:有些特殊的中文字符、表情符号等可能是四字节的 UTF-8 编码,在使用 utf8mb4 字符集下可以正确存储和处理这些字符。
  3. 预防乱吗存储和乱码显示:设置正确的字符集可以确保数据正确存储和显示,避免出现乱码问题。

语句 SET NAMES utf8mb4; 一般放在连接数据库之后,用于指定当前数据库连接所使用的字符集为 utf8mb4。这样就可以确保数据库连接正常处理包含 emoji 和特殊字符的数据,避免数据丢失或显示异常。

总之,通过设置字符集为 utf8mb4,可以更好地适应和存储各种类型的文本数据,尤其是包含 emoji 表情或特殊字符的情况。

可能的问题

如果在执行 SET NAMES utf8mb4; 后,无法正确显示汉字,可能是因为终端或命令行工具的字符集设置与 MySQL 字符集不匹配。您可以尝试以下方法解决这个问题:

  1. 检查终端字符集设置:确保您使用的终端或命令行工具支持 utf8mb4 字符集。您可以尝试手动将终端字符集设置为 utf8mb4 或 UTF-8。

  2. 确认数据库和表的字符集:除了连接字符集外,还要确保数据库和表的字符集也设置为 utf8mb4。可以通过以下 SQL 语句确认数据库和表的字符集设置:

    sql
    SELECT CHARACTER_SET_NAME, TABLE_NAME
    FROM information_schema.`TABLES`
    WHERE TABLE_SCHEMA = 'your_database_name';

    确保数据库和表的字符集都是 utf8mb4。

  3. 在连接字符串中指定字符集:在连接数据库时,可以使用连接字符串指定字符集,例如:

    plaintext
    mysql -u your_username -p --default-character-set=utf8mb4 your_database_name
  4. 尝试重启 MySQL 服务:有时,在修改字符集后,需要重启 MySQL 服务器才能生效。请尝试重启 MySQL 服务。

通过以上方法,希望您可以解决无法正常显示汉字的问题。

数据库配置 utf8mb4 字符集

const pool = mysql.createPool(dbconfig); 怎么配置默认字符集是 utf8mb4

要在创建 MySQL 连接池时配置默认字符集为 utf8mb4,您可以通过在连接选项中设置charset参数来实现。下面是一种可能的示例:

javascript
const mysql = require("mysql");
const dbconfig = {
  host: "your_host",
  user: "your_username",
  password: "your_password",
  database: "your_database",
  charset: "utf8mb4",
};

const pool = mysql.createPool(dbconfig);

在上述代码中,我们将 charset 参数设置为 'utf8mb4',从而确保连接池使用 utf8mb4 字符集进行通信和数据存储。

请根据您的实际数据库连接配置修改上述示例中的主机名、用户名、密码和数据库名等信息。通过这种方式配置连接池后,即可在与数据库进行交互时使用 utf8mb4 字符集。