今天发现存进mysql的数据部分丢失了。发现丢失的都是一些生僻的汉字。我这个mysql使用的是utf8字符集,之前一直以为不会发生这种问题,今天才看到了。而且这个问题很早就存在了。这是mysql的一个bug,它的UTF-8字符集只能存储3字节字符,而有部分生僻的汉字是4个字节的,存入时就会出错:
ActiveRecord::StatementInvalid: Mysql::Error: Incorrect string value: ‘\xF0\x90\x8D\x83\xF0\x90…’ for column ‘content’ at row 1
上面的官方bug页面说要到mysql6.0才会解决。其实这个问题在mysql 5.5就解决了。5.5或以上的mysql都可以通过使用utf-16或utf8mb4等字符集解决这个问题。
不过使用ruby on rails的话可能需要一些额外的设置。