ER_TRUNCATED_WRONG_VALUE_FOR_FIELD将一些string保存到mysql

我正在使用node.js, node-mysql npm模块,在mysql( sql_mode=STRICT_ALL_TABLES )中有一个utf8列,并且可以正常存储“常规”的utf8字符,但是对于某些input,它会抛出:

AssertionError: Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xF3\xA5\xB5\xA5\xEF\xBF...'

我想这是由于一些字符在utf8之外。 我知道可以在mysql中使用utf8mb charset,但在这种情况下,我不关心这些字符,只想从string中删除它们,而不是更改mysqlconfiguration。

是否有可能使用node.js删除这些字符?

这里的RFC提供了一个unicode字符代码列表以及他们所采用的字符数目:

  Char. number range | UTF-8 octet sequence (hexadecimal) | (binary) --------------------+--------------------------------------------- 0000 0000-0000 007F | 0xxxxxxx 0000 0080-0000 07FF | 110xxxxx 10xxxxxx 0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 

虽然我提供的错误消息没有显示任何宽字符:

 node -e 'console.log("\xF3\xA5\xB5\xA5\xEF\xBF")' ó¥µ¥ï¿ 

这个页面显示所有这些字符都是2字节,我仍然试着用.replace(/[\u0800-\uFFFF]/g, '')从我的string中删除宽(3个或更多的八位字节)它的工作!

将列转换为utf8mb4字符集。 utf8字符集仅限于字符

http://dev.mysql.com/doc/refman/5.6/en/charset-unicode-utf8mb4.html