如何处理数据以避免MySQL"错误的字符串值"错误?

Eth*_*han 4 ruby mysql encoding ruby-on-rails character-encoding

我正在尝试使用Rake任务将一些遗留数据从MS Access迁移到MySQL.我正在使用Ruby 1.8.6开发Windows XP.

我将Rails的编码设置为"utf8" database.yml.

此外,MySQL的默认字符集是utf8.

99%的数据都很好,但是偶尔我会得到一个列值,这会给我一个像这样的错误:

Mysql::Error: Incorrect string value: '\x92 Comm...' for column 'name' 
  at row 1: 
  INSERT INTO `organizations` ( [...] ) 
  VALUES('Lawyers’ Committee', [...] )
Run Code Online (Sandbox Code Playgroud)

看起来给MySQL带来麻烦的事情就是"律师"一词中的"s"之后的撇号.

这是另一个......

Mysql::Error: Incorrect string value: '\x99 aoc' for column 'department' 
  at row 1: 
  INSERT INTO `addresses` 
[...]
  'TRInfo™ aoc'
[....]
Run Code Online (Sandbox Code Playgroud)

看起来它在"TRInfo"之后对"TM"感到窒息.

是否有任何Ruby或Rails方法可以运行数据来清除MySQL将要阻塞的任何字符?

理想情况下,用更可口的字符替换它们会很棒 - 用单引号替换撇号,用字符串"(TM)"替换TM符号.

或者,如果我可以以某种方式配置MySQL以按原样存储这些字符而不会出现错误.

Kat*_*one 5

看起来你的输入数据不是utf-8.

我做了一些调查,Lawyer's中使用的样式编码在Windows-1252编码中被编码为\ x92,但是对于utf-8来说是无稽之谈(当我解码它并将其编码为utf8时,我得到了\ xe2\x80\X99).

因此,您需要将输入字符串从windows-1252转换为utf-8(或转换为unicode).

  • 这个解决方案没有回答OP问题"有什么方法......" (4认同)