【问题标题】:Storing UTF8 data in MySQL在 MySQL 中存储 UTF8 数据
【发布时间】:2009-12-21 20:32:50
【问题描述】:

当使用 UTF8 字符集在 mysql 中存储数据时,在输入数据时对实体字符进行转义是否有意义,还是以原始形式存储并在取出时对其进行转换更好?

例如,假设有人在文本框中输入了一个项目符号 (•) 字符。保存该数据时,是否应在输入之前将其转换为•?还是将其作为子弹输入,然后在拔出时转换是否有意义?

我想我只是不确定存储非 ascii 数据的最佳做法。任何想法将不胜感激。

【问题讨论】:

    标签: mysql database utf-8 character-encoding


    【解决方案1】:

    如果您在整个应用程序中使用 UTF-8 字符集(即 MySQL,还有 HTML 页面、脚本、代码等的编码),则不需要将“特殊字符”转换为实体:只需将您的文本数据也发送为 UTF-8 ;-)

    【讨论】:

    • 这绝对是有道理的,这样想。
    • 这是 UTF-8 的一大优点:麻烦更少(嗯……嗯……至少在您完成所有应用程序和服务器的设置后 ^^)
    【解决方案2】:

    按原样存储数据。在运行时执行显示所需的任何转换。

    因为如果将其存储为 HTML(带有实体),则会产生多个问题

    • 您将数据锁定为 HTML 格式,而不仅仅是“文本内容”
    • 弄乱数据宽度(例如,varchar(255) 或使用 SQL 字符串函数,如 substring()reverse()
    • 如果不转换搜索输入,就无法搜索这些字符

    【讨论】:

    • 所有很好的理由。将数据锁定到 HTML 是不这样做的一个很好的理由……我没有考虑到这一点。
    【解决方案3】:

    转义的目的是通过不允许某些字符的通道传输数据。由于 UTF-8 数据库可以很好地处理 UTF-8 字符,因此您没有理由转义任何内容以进行存储。事实上,由于转义文本更难操作(例如字符串函数无法正常工作),因此通常建议不要执行不必要的转义。

    【讨论】:

      【解决方案4】:

      考虑到数据库可以为多个应用程序托管数据。

      在那种环境中,数据库中字符串的定义是由数据库而不是应用程序定义的。使您的应用程序符合数据标准,并在您的数据层中明确转换。

      例如,如果数据库是较新的架构并且 DBA 已定义字符串将以 UTF-8 存储,那么从您的应用程序传递的所有字符串都应该是 UTF-8。

      但是,如果数据库是旧系统并且您的数据目标是 8 位字符集,则在您的应用程序中转换为适当的代码页和/或在遇到不符合要求的值时失败.

      与 Web 交互的大多数较新的数据库架构都应标准化为 UTF-8 或 UTF-16。如果您正在构建数据库,请先将其本地化,然后,一旦您决定了内部字符串表示,就强制所有写入它的应用程序符合您的标准。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-18
        • 2012-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-29
        • 1970-01-01
        相关资源
        最近更新 更多