【问题标题】:Mysql encoding errorMysql编码错误
【发布时间】:2015-06-27 16:52:01
【问题描述】:

我正在尝试使用 mysql2 驱动程序从节点在 mysql 中插入一行,但出现以下错误:

running query \"INSERT INTO outgo (name, monthIdMonth, type, distribution, recurrent, amount) VALUES ('Penalizări', (select MAX(idMonth) from `month`), '3', '1', '1', '0');\"
failed: Error: Incorrect string value: '\\xC4\\x83ri' for column 'name' at row 1

输出表是这样创建的:

CREATE TABLE IF NOT EXISTS `outgo` (
  `idOutgo` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `apartmentsGroupIdApartmentsGroup` INT UNSIGNED NULL,
  `outgoColumnInfoIdOutgoColumn` INT UNSIGNED NULL,
  `metering` ENUM('NONE','COLD_WATER','HOT_WATER','OTHER') NULL,
  `distribution` ENUM('MANUAL','PERSON','APARTMENT','SURFACE','CONSUMPTION', 'AUTOMATED','HEAT_SURFACE') NULL,
  `amount` DOUBLE(14,2) NULL,
  `cAmount` DOUBLE(14,2) NULL,
  `costPerUnit` DOUBLE(15,3) NULL,
  `unit` VARCHAR(5) NULL,
  `quantity` DOUBLE(14,2) NULL,
  `diffs` DOUBLE(14,4) NULL,
  `recurrent` TINYINT(1) NOT NULL DEFAULT 0,
  `monthIdMonth` INT UNSIGNED NOT NULL,
  `type` ENUM('GENERAL','REMAINING','PENALITY') NOT NULL DEFAULT 'GENERAL',
  `billIdBill` INT UNSIGNED NULL,
ENGINE = InnoDB;

知道问题是什么吗?它抱怨的字符串是:“Penalizări”。 Schema 编码是 utf8....

【问题讨论】:

  • outgo 显示SHOW CREATE TABLE。什么是连接编码?
  • 我没有指定连接编码。我怎么知道?它是 linux 上返回的“locale”命令吗?
  • 你能显示用于插入行的代码吗?
  • 您是否尝试使用ă?它的 utf8 十六进制是 C483。一个猜测:你没有指定utf8 all the way through

标签: mysql node.js utf-8 character-encoding


【解决方案1】:

所以,最后我找到了解决方案:我在节点连接中添加了一个charset参数:

var pool  = mysql.createPool({
    host     : config.get.mysql.host,
    port     : config.get.mysql.port,
    user     : config.get.mysql.username,
    password : config.get.mysql.password,
    database : 'general',
    connectionLimit : 50,
    queueLimit : 5000,
    charset: "utf8_general_ci"
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2011-08-17
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多