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以按原样存储这些字符而不会出现错误.
看起来你的输入数据不是utf-8.
我做了一些调查,Lawyer's中使用的样式编码在Windows-1252编码中被编码为\ x92,但是对于utf-8来说是无稽之谈(当我解码它并将其编码为utf8时,我得到了\ xe2\x80\X99).
因此,您需要将输入字符串从windows-1252转换为utf-8(或转换为unicode).