@programming
投稿日 2024/10/7
更新日 2024/10/7 ✏
node-mysqlを使った絵文字挿入でER_TRUNCATED_WRONG_VALUE_FOR_FIELDエラー
前提
- mysql server v8.0
- node v18.20.4
- node-mysqlv2.18.1
問題
CREATE TABLE IF NOT EXISTS `test` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`content` TEXT CHARACTER SET utf8mb4 NOT NULL COMMENT '絵文字入りコンテンツ',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=ASCII;
CLIのmysqlクライアントから上記のテーブルへ絵文字入りのレコードをINSERTすると成功するにもかかわらず、 プログラムから node-mysql モジュールを使ってINSERTするとER_TRUNCATED_WRONG_VALUE_FOR_FIELD
エラーが発生する。
問題のコード:
const mysql = require("mysql");
const conn = mysql.createConnection({
host: '127.0.0.1',
user: 'dbuser',
password: 'dbpass',
database: 'test',
});
// ER_TRUNCATED_WRONG_VALUE_FOR_FIELDエラー!!!
conn.query("INSERT INTO `test`(`content`) VALUES ('😀')", (err, res) => {...});
解決方法
node-mysql モジュールのDB接続作成オプションにcharset: "utf8mb4"
を与える。
const conn = mysql.createConnection({
// ...
charset: 'utf8mb4', // <= 明示的に指定!
});
// エラー無く絵文字をINSERTできる!
conn.query("INSERT INTO `test`(`content`) VALUES ('😀')", (err, res) => {...});
以上