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: '\xE6\x88\x91\xE6\x98\xAF...' 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 后可以看到,我们也能插入中文汉字了,也能查询出来哦,如下图所示:
Mac系统下Mysql存储数据报错 ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value的更多相关文章
- mac系统下mysql开机启动总是3307
修改了mysql的my.cnf可还是不行,启动后就是3307,必须关掉再启动. 觉得可能是mac系统在哪里写死了开机启动项. http://queforum.com/mysql/1012987-mys ...
- ABP 切换mysql 数据库报错mysqlexception: incorrect string value: ‘\xe7\xae\x80\xe4\xbd\x93…’ for column display name
刚折腾了ABP框架,为了跨平台,将SQL Server数据库换成了MySQL数据库,ABP框架上支持多语言,中间被字符集折腾的够呛,翻了N个博客,最后终于在StackOverFlow 上找到了最终的解 ...
- Mac 系统下 mysql 的安装与配置
1.mysql 的安装 1)官网下载 mysql 安装包:http://www.mysql.com/downloads/ 2)下载后解压打开安装包,点击 pkg 文件进行安装 3)注意:最后一步弹窗会 ...
- Mac系统下MySql下载MySQL5.7及详细安装流程
一.在浏览器当中输入以下地址 https://dev.mysql.com/downloads/mysql/ 二.进入以下界面:直接点击下面位置 ,选择跳过登录 点过这后直接下载. 三.下载完成后 ...
- mysql导入数据报错:Incorrect datetime value
incorrect datetime value 报错信息如下图: 意思很明显是说,'0000-00-00 00:00:00'不是一个有效的日期类型的值 解决办法: sql_mode 中删除 NO_Z ...
- mysql插入中文数据报错:incorrect string value
我是用的source指令来执行sql脚本文件时发现的这个错误 我的数据库用创建的时候create Database If Not Exists XXXXXX Character Set UTF8; 那 ...
- 特殊符号存入mysql数据库时报错:Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F的解决方法
问题描述:从新浪微博抓取消息保存到MySQL数据中,对应数据库字段为varchar,字符编码utf-8.部分插入成功,部分插入失败,报错如标题. 在网上查询,有人说是编码问题,建议修改编码格式,比如改 ...
- Mysql插入数据报错java.sql.SQLException: Incorrect string value: '\xF0\x9F\x93\x8D\xE6\x88...'
今天读取solr里面的数据,往mysql插入时报错, Incorrect string value: '\xF0\x9F\x93\x8D\xE8\x88...' for column 'title' ...
- Mac系统下Datagrip打不开、点击没反应?
有没有可能是因为你从网上下载了一些破解软件导致的? 背景 Mac系统下JB公司家的IDEA. Datagrip.PyCharm 或 Goland 打不开点击没反应-- 分析 大概率是之前安装过 汉化插 ...
随机推荐
- iBinary C++STL模板库关联容器之map/multimap
目录 一丶关联容器map/multimap 容器 二丶代码例子 1.map的三种插入数据的方法 3.map集合的遍历 4.验证map集合数据是否插入成功 5.map数据的查找 6.Map集合删除元素以 ...
- RESTful杂记
在网上找了许久的关于REST的资料,发现网上大部分都是说的比较片面,虽然有部分说出了本质,但也没有详细提出,所以在这里记录一下. RESTful是什么 首先,维基百科是这样说的: 表现层状态转换(RE ...
- 大前端的自动化工厂(2)—— SB Family
原文链接:https://bbs.huaweicloud.com/blogs/53c0c3509b7a11e89fc57ca23e93a89f 我坦白我是标题党,SB只是SCSS-Bourbon的简写 ...
- 经典JS的HTML转义与反转义字符
//HTML转义 function HTMLEncode(html) { var temp = document.createElement ("div"); (temp.text ...
- 对配置文件 xml 进行操作
个人喜欢用 Linq 的方式来进行操作,方便快捷 <?xml version="1.0" encoding="utf-8" ?> <confi ...
- [PHP] defunct僵尸进程
1.如果子进程先于父进程退出, 同时父进程又没有调用wait/waitpid,则该子进程将成为僵尸进程 2.如果fork完就不管了可以使用 忽略子进程信号, 防止僵尸进程 pcntl_signal(S ...
- Java开发笔记(五十七)因抽象方法而产生的抽象类
前面介绍了类的常见用法,令人感叹面向对象的强大,几乎日常生活中的所有事物,都可以抽象成Java的基类及其子类.然而抽象操作也有副作用,就是某个抽象而来的行为可能是不确定的,比如半夜鸡叫,如果是公鸡则必 ...
- 有关mysql实现oracle分析函数功能的方法
目前公司erp开发有一个脚本需求:对于收款合同审批单和收款合同(n:1),需要获取收款审批单中最新的一条审批记录来更新其对应的收款合同的相关信息. 难点主要在对相同类别的属性进行分组然后组内排序(分组 ...
- 小tips:path的join和resolve的使用区别
1.连接路径:path.join([path1][, path2][, ...]) path.join()方法可以连接任意多个路径字符串.要连接的多个路径可做为参数传入. path.join()方法在 ...
- RMQ求LCA
题目链接 rmq求LCA,interesting. 一直没有学这玩意儿是因为CTSC的Day1T2,当时我打的树剖LCA 65分,gxb打的rmq LCA 45分... 不过rmq理论复杂度还是小一点 ...