zoukankan      html  css  js  c++  java
  • Mac系统下Mysql存储数据报错 ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value

    比如如下mysql操作插入数据:

    const mysql = require('mysql');
    /*
     createConnection方法创建一个表示与Mysql数据库服务器之间连接的 Connection对象
    */
    const connection = mysql.createConnection({
      host: 'localhost',
      port: 3306,
      database: 'my_db',
      user: 'root',
      password: '123456'
    });
    
    /*
     connection 对象被创建之后,可以使用该对象的 connect方法建立mysql数据库服务器之间的连接
    */
    connection.connect((err) => {
      if (err) {
        console.log('数据库连接失败');
      } else {
        console.log('数据库连接成功');
        // 执行sql新增数据操作
        connection.query('INSERT INTO User SET ?', {
          UserName: '空智2',
          Password: '123456789'
        }, (err, res) => {
          if (err) {
            console.log(err);
            console.log('插入数据失败');
          } else {
            console.log('插入数据成功,我接着再查询一遍');
            connection.query('SELECT * FROM ??', ['User'], (err, res) => {
              if (err) {
                console.log('查询数据失败');
              } else {
                console.log(res);
              }
            })
          }
        })
        /*
         在不需要使用该数据库的时候,可以使用 Connection对象的end方法或destory方法关闭数据库之间的连接
        */
        connection.end((err1) => {
          if (err1) {
            console.log('关闭数据库操作失败');
          } else {
            console.log('关闭数据库操作成功');
          }
        })
      }
    });

    然后在命令行中执行 node app.js 后报错如下信息:

    经过百度搜索,这个原因是MySql编码的问题。UTF-8编码有可能是两个、三个、四个字节。而Mysql的utf8编码最多3个字节,所以数据插不进去。

    解决方法:

    1. 找到 my.cnf, 执行命令如下:

    sudo find / -name my.cnf

    如下所示:

    2. 修改编码方式; 把下面配置放到my.cnf中

    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    collation-server = utf8mb4_bin  #utf8mb4_unicode_ci 会导致部分字符查询出错

    如下图所示:

    3. 保存,重启Mysql服务

    启动MySQL服务
    sudo /usr/local/mysql/support-files/mysql.server start

    停止MySQL服务
    sudo /usr/local/mysql/support-files/mysql.server stop

    重启MySQL服务
    sudo /usr/local/mysql/support-files/mysql.server restart

    mysql 重启完成后,登录mysql,查看配置是否生效了,如下所示:

    如上执行命令:SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

    可以看到生效了,

    4. 重新创建数据库。

    create database 我的数据库名称;

    如下图所示:

    查看所有的数据库,如下图所示

    5. 创建表。命令如下:

    CREATE TABLE User
    (
    ID int NOT NULL AUTO_INCREMENT,
    UserName varchar(255) NOT NULL,
    Password varchar(255) NOT NULL,
    PRIMARY KEY (ID)
    );

    如下所示

    6. 查看表的编码,如下命令:show create table user;

    如下所示:

    7, 我们再执行下代码如下(在命令行中执行 node app.js):

    const mysql = require('mysql');
    /*
     createConnection方法创建一个表示与Mysql数据库服务器之间连接的 Connection对象
    */
    const connection = mysql.createConnection({
      host: 'localhost',
      port: 3306,
      database: 'new_my_db',
      user: 'root',
      password: '123456'
    });
    
    /*
     connection 对象被创建之后,可以使用该对象的 connect方法建立mysql数据库服务器之间的连接
    */
    connection.connect((err) => {
      if (err) {
        console.log('数据库连接失败');
      } else {
        console.log('数据库连接成功');
        // 执行sql新增数据操作
        connection.query('INSERT INTO User SET ?', {
          UserName: '我是空智',
          Password: '123456789'
        }, (err, res) => {
          if (err) {
            console.log(err);
            console.log('插入数据失败');
          } else {
            console.log('插入数据成功,我接着再查询一遍');
            connection.query('SELECT * FROM ??', ['User'], (err1, res) => {
              console.log(err1)
              if (err1) {
                console.log('查询数据失败');
              } else {
                console.log(res);
              }
            })
          }
        })
      }
    });

    报错的信息  如下图所示:

    报错的信息提示:Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: 'xE6x88x91xE6x98xAF...' for column 'UserName' at row 1

    上述的问题还是因为编码的问题产生的,因为我们使用了已经创建好的数据库和表,但是编码并没有改成 utf-8;

    通过以下命令查看表的编码:

    show create table (数据库名.表名);

    如下图所示:

    修改方法如下:

    ALTER TABLE new_my_db.user CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

    如下图所示:

    我们再来查看下user表的列字段的编码如下:(使用命令:show FULL COLUMNS FROM new_my_db.user;)

    改完以后,我们再来执行 我们的上面的代码,在命令行中执行 node app.js 后可以看到,我们也能插入中文汉字了,也能查询出来哦,如下图所示:

  • 相关阅读:
    SpringBoot集成Shiro 实现动态加载权限
    docker 常用命令 以及常见问题
    sql小知识点
    下载文件时-修改文件名字
    关于.net导出数据到excel/word【占位符替换】
    常见js报错
    .net core api +swagger(一个简单的入门demo 使用codefirst+mysql)
    .net core +codefirst(.net core 基础入门,适合这方面的小白阅读,本文使用mysql或mssql)
    基础测试jmeter5.0+badboy(从小白到入门)
    关于ef+codefirst+mysql/dapper(dbFirse)(入门)
  • 原文地址:https://www.cnblogs.com/tugenhua0707/p/10732453.html
Copyright © 2011-2022 走看看