记录下博客支持emoji表情的坎坷

  之前博客程序因空间数据库版本为 MYSQL5.1 ,不支持uft8mb4,也就没去弄,导致偶尔不小心输入了 emoji 表情,保存时就报错,很是恼火,最近换了空间,于是乎就想着弄上,便发生了以下坎坷。

照旧先问度娘

  度娘告诉我两步轻松搞定。

步骤一:执行以下sql语句,修改typecho数据库中表的编码格式为utf8mb4;

alter table typecho_comments convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_contents convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_fields convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_metas convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_options convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_relationships convert to character set utf8mb4 collate utf8mb4_general_ci;
alter table typecho_users convert to character set utf8mb4 collate utf8mb4_general_ci;

步骤二:修改根目录 config.inc.php 文件内容,将 'charset' => 'utf8' 改成 'charset' => 'utf8mb4'

悲剧来了

  第一步就直接报错:1071 - Specified key was too long; max key length is 767 bytes ,what fuck !什么鬼?

  又是一翻百度,get 到以下知识点:

  1. 1071 - Specified key was too long; max key length is 767 bytes错误,意思就是“索引字段长度太长,超过了767 bytes ;
  2. innodb存储引擎,多列索引的长度限制:每个列的长度不能大于767 bytes;所有组成索引列的长度和不能大于3072 bytes ;
  3. myisam存储引擎,多列索引的长度限制:每个列的长度不能大于1000 bytes,所有组成索引列的长度和不能大于1000 bytes;
  4. mysql的varchar主键只支持不超过767个字节或者768/2=384个双字节 或者767/3=255个三字节的字段 而GBK是双字节的,UTF8是三字节的,UTF8mb4是四字节的;

  而我又恰好用的是 innodb 存储引擎,研究数据表,发现有很多字段的 varchar 值为 255 ,大于 767/4=191 ,所以导致执行上面数据库 sql 代码时报错。

  好吧,既然问题找到了,那就搞吧。于是乎,一张一张数据表手动改,把 varchar 大于 191 的都改成 191 ( varchar 小于 191 ,就不用管它)。再把 config.inc.php 改好,还真成功了。

为啥不改存储引擎

  就在我测试成功发送 emoji 表情后,突然想到,傻逼,为啥不直接改存储引擎为 myisam ,官方既然把有些 varchar 设置为 255 ,肯定就是默认我们会使用 myisam存储引擎。于是乎,又是一顿神操作:

步骤一:将所有表的存储引擎改为 myisam;

ALTER TABLE typecho_comments ENGINE=MyISAM;
ALTER TABLE typecho_contents ENGINE=MyISAM;
ALTER TABLE typecho_fields ENGINE=MyISAM;
ALTER TABLE typecho_metas ENGINE=MyISAM;
ALTER TABLE typecho_options ENGINE=MyISAM;
ALTER TABLE typecho_relationships ENGINE=MyISAM;
ALTER TABLE typecho_users ENGINE=MyISAM;

步骤二: 把之前改的 varchar 都改回来;

步骤三: 修改根目录 config.inc.php 文件内容,将 'engine' => 'INNODB', 改成 'engine' => 'MyISAM',

  好了,轻松秒杀,舒服啊!

另外 get 到一新技能

  一个实用快捷键,在 win10 输入法自带了 emoji 表情,可以通过 win + 句号 来打开表情面板,输入 emoji 时更便捷点。?????

大家如果有新增数据表,记得在执行上面操作时加上。

小白神操作,大佬勿喷!

~ ~  本文结束,喜欢请点赞+分享  ~ ~


 赏 
感谢您的支持,我会继续努力哒!
支付宝收款码
tips
(*) 2 + 5 =
本文共 11 条评论。您也快来参与吧!
    2022年06月16日 广东省惠州市 发自Windows 10 回复 0

    我的去年已经转换过编码,上个月博客被黑重新安装了博客,忘了将config.inc.php里的编码改掉很多评论有emoji表情都会报错。最近才整好..打算近期升级1.2

      2022年06月16日 海南省海口市 发自Android 回复 0

    2022年04月12日 贵州省贵阳市 发自Windows 10 回复 0
    该评论仅博主及评论双方可见!
      2022年04月12日 广东省广州市 发自Windows Server 2003 回复 0
      该评论仅博主及评论双方可见!
        2022年04月12日 贵州省贵阳市 发自Windows 10 回复 0

        没有呢

        2022年04月12日 贵州省贵阳市 发自Windows 10 回复 0

        哦,我想起来了。篱落主机数据库建立的时候自动是加了前缀的。
        这个应该算是改过前缀吧?

      2022年04月12日 广东省广州市 发自Windows 10 回复 0
      1046 - No database selected

      可能是你执行sql语句前,没打开博客数据库,你要先打开博客数据库,再去执行sql语法

        2022年04月12日 贵州省贵阳市 发自Windows 10 回复 0

        666,完美解决!谢谢~

          2022年04月12日 广东省广州市 发自Windows 10 回复 0

          ok

    2022年04月11日 贵州省贵阳市 发自Windows 10 回复 0

    我靠,我的遭遇跟您一模一样,说好的两步搞定,结果第一步执行SQL命令就报错!
    我是小白,还是没看懂最后你怎么操作成功的?

      2022年04月11日 广东省广州市 发自Windows Server 2003 回复 0

      您报的啥错?一样吗?