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