我正在尝试使用 Rake 任务将一些遗留数据从 MS Access 迁移到 MySQL。我在 Windows XP 上工作,使用 Ruby 1.8.6。
我在 database.yml
中将 Rails 的编码设置为“utf8”。
此外,MySQL 的默认字符集是 utf8。
99% 的数据都正常,但时不时地我会得到一个列值,给我这样的错误:
Mysql::Error: Incorrect string value: '\x92 Comm...' for column 'name'
at row 1:
INSERT INTO `organizations` ( [...] )
VALUES('Lawyers’ Committee', [...] )
看起来给 MySQL 带来麻烦的是单词“Lawyers”中紧跟在“s”之后的撇号。
还有一个...
Mysql::Error: Incorrect string value: '\x99 aoc' for column 'department'
at row 1:
INSERT INTO `addresses`
[...]
'TRInfo™ aoc'
[....]
看起来它被“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)。
关于mysql - 如何处理数据以避免 MySQL "incorrect string value"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/947975/