mysql - 如何处理数据以避免 MySQL "incorrect string value"错误?

标签 mysql ruby-on-rails ruby encoding character-encoding

我正在尝试使用 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/

相关文章:

php - 使用 php 中的字符串运行 MySQL 查询

java - JAVA中如何查看mysql更新语句的返回值

ruby-on-rails - Rails - Twitter Bootstrap i18n - 验证

ruby-on-rails - capistrano deploy_symlink 失败

ruby-on-rails - 当加载根命名空间中的另一个同名类时,Rails 类加载会跳过命名空间类

ruby-on-rails - 有没有办法覆盖 Ruby 中的 << 运算符?

ruby - Anagrams Code Kata,Ruby 解决方案非常慢

ruby - 基于 GUI 的 Ruby 调试器?

php - 在 php 函数中显示来自 mysql 的多行

php - Mysql select 在 php 中给出错误答案