【问题标题】:Unicode formatting lost when inserting into MySQL database in Ruby 1.8.7在 Ruby 1.8.7 中插入 MySQL 数据库时,Unicode 格式丢失
【发布时间】:2011-09-03 21:23:22
【问题描述】:

在 Ruby 中,我有一堆用 UTF-8 编码的字符串,例如:“HEC Montr\u00e9al”。

当我使用 'mysql' gem 将它插入我的 MySQL 表(格式化为 utf8_general_ci)时,反斜杠被删除。是什么赋予了 :) ?你们中有人知道这里到底发生了什么吗?

编辑:

示例字符串:

>> p mystring
"HEC Montr\\u00e9al"

插入后在数据库中:

HEC Montru00e9al

【问题讨论】:

    标签: mysql ruby json unicode utf-8


    【解决方案1】:

    这不是 UTF:

    'HEC Montr\u00e9al'
    

    这是 JSON 编码的 Unicode 字符串的 ASCII 表示。如果是 UTF-8,它看起来像:

    'HEC Montréal'
    

    当您的服务器需要纯文本时,您没有正确解码您的 JSON 输入,或者您的客户端代码正在发送您的服务器 JSON。

    首先,您需要弄清楚为什么您会得到 JSON 编码的字符串,而您并不期望它们,或者弄清楚为什么您没有正确解码您的 JSON。然后您可以查看数据库是否正在破坏您的 UTF-8。

    【讨论】:

    • 谢谢,我会试着弄清楚为什么我会得到 JSON 编码的字符串
    • 好的,你完全正确。感谢一百万次指出这一点!
    • @ulvund:不用担心,我对隧道视觉的了解更多,“不可能是那样”,并且寻找错误的错误比我想的要多:)
    【解决方案2】:

    我相信你必须明确告诉 MySQL gem 期待 utf8。像这样的:

    db = Mysql.init
    db.options(Mysql::SET_CHARSET_NAME, 'utf8')
    db.real_connect(...
    

    【讨论】:

    • 我以相反的顺序执行此操作(连接到数据库,设置字符集)。现在试试你的方法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2022-01-22
    • 1970-01-01
    • 2019-02-01
    • 2014-11-22
    相关资源
    最近更新 更多