【问题标题】:Why is mysql generating garbled text with utf8mb4_unicode_ci collation?为什么mysql会使用utf8mb4_unicode_ci排序规则生成乱码?
【发布时间】:2019-10-14 19:27:27
【问题描述】:

我在一个带有 utf8mb4 排序规则的 mysql 数据库中有一个 mediumtext 列:

cmets mediumtext utf8mb4_unicode_ci

当我执行 mysql ENCODE 时,文本被保存到数据库列:

INSERT INTO mytable VALUES (ENCODE('test', 'abc'));

但是,当我尝试解码时,它的输出文本是乱码:

SELECT DECODE(comments,'abc') FROM mytable WHERE 1

这个例子会显示:

�1�= g3���

如果我将该列更改为 latin1_swedish_ci,则一切正常,并显示“测试”。请注意,我正在保存通过 php 表单输入“测试”文本,但不以任何方式处理数据。

1 - 关于为什么会发生这种情况的任何想法?

2 - 有没有办法解码乱码?试了好几种方法都没用。

谢谢!

【问题讨论】:

    标签: mysql utf8mb4


    【解决方案1】:

    也许字符串文字默认为 latin1。试试这个:

    INSERT INTO mytable VALUES (ENCODE(_utf8mb4'test', 'abc'));
    

    【讨论】:

    • 不幸的是,我得到了完全相同的结果:�1�= g3���
    【解决方案2】:

    不要在文本列中放置非文本。

    ENCODE生成二进制信息,所以放入二进制列,如MEDIUMBLOB

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-19
      • 2020-11-20
      • 2015-07-07
      • 2020-08-28
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多