Mybatis输出中文乱码

img


想请问一下一直输出中文是乱码怎么回事
mysql中也设置了utf8
idea也设置了utf8
真不知道咋回事了

数据库连接URL 后面加上 这个

&characterEncoding=UTF-8

数据库编码,项目编码都整好,啥都不用加就没问题了,你这估计用navicat这些客户端去查看表数据,应该就是乱码的

在 Mybatis 中输出中文乱码的问题,可能是因为以下原因导致的:

  1. 数据库连接字符集设置不正确:你需要在数据库连接 URL 中设置 useUnicode=true&characterEncoding=utf-8,例如:

    <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&amp;characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
    </dataSource>
    
  2. 数据库表字符集设置不正确:你需要在创建数据库表时设置表的字符集为 utf8,例如:

    CREATE TABLE `mytable` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
  3. Mybatis 配置文件字符集设置不正确:你需要在 Mybatis 配置文件中设置字符集为 UTF-8,例如:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <properties>
            <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="jdbc.url" value="jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&amp;characterEncoding=utf-8"/>
            <property name="jdbc.username" value="root"/>
            <property name="jdbc.password" value="password"/>
        </properties>
        <typeAliases>
            <typeAlias type="com.example.model.User" alias="User"/>
        </typeAliases>
        <mappers>
            <mapper resource="com/example/mapper/UserMapper.xml"/>
        </mappers>
    </configuration>
    
  4. IDE 编辑器字符集设置不正确:你需要在 IDE 编辑器中设置字符集为 UTF-8,例如:

    • IntelliJ IDEA:在菜单栏中选择 File -> Settings -> Editor -> Code Style -> File Encodings,将 Global EncodingProject Encoding 设置为 UTF-8

    如果以上步骤都正确配置了,但仍然出现乱码问题,你可以尝试在输出中文之前,先将要输出的字符串使用 new String(str.getBytes("ISO-8859-1"), "UTF-8") 进行编码转换,将编码从 ISO-8859-1 转换成 UTF-8。例如:

    String name = "张三";
    name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
    System.out.println(name); // 输出:张三
    

希望以上解决方案能够帮助你解决输出中文乱码的问题。
麻烦点一下采纳