比如如下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 后可以看到,我們也能插入中文漢字了,也能查詢出來哦,如下圖所示: