emoji-thinkphpmysql如何对指定表使用指定字符编码进行查询和操作?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了emoji-thinkphpmysql如何对指定表使用指定字符编码进行查询和操作?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2400字,纯文字阅读大概需要4分钟。
内容图文
问题是这样的:有一数据库,里面有很多表,也有很多已存在的数据,这些数据多数都是用utf8存储的(不全是,还有latin1的)。
遇到了用户存emoji导致存储失败的问题,已知是需要utf8mb4才能正确存储。
已经把mysql从5.1升级到5.6.26了。接下来的想法和已有的尝试:
1、如果把整个数据库都更新成uft8mb4的话,风险太大,因为各种调用的地方乱七八糟,维护不良,直接变成utf8mb4的话可能整个系统都不正常。
2、考虑只把用户会存储emoji的表(以下简称表E)更新成uft8mb4,然而这里系统用的是thinkphp写的,编码设置是放在config.php中的,修改这里的话,thinkphp就全灭了。
3、接着2考虑的话,thinkphp主体仍然用uft8不变,仅在查询这个表E的时候临时使用uft8mb4进行查询。尝试M()->query('SET NAMES \'utf8mb4\'');
结果报错:SQLSTATE[HY000]: General error
4、仍然考虑2的方法发现也不行。因为即使查询了这个表E成功之后,又会进行其他表的操作,uft8mb4又可能会导致接下来的查询出错。
求助有没有好的办法能只针对这一个表进行以utf8mb4为编码的操作,并且还不影响其他表的操作。
PS:因为生产环境已经上线一年了已有很多数据和在线用户,而现在测试才报出来有这个问题。数据库整体更新编码实在风险太大,领导的意思是哪有坑先填哪,没发现的坑就假装没看见。
幸运的是生产环境当时搭建系统时是我安装的,mysql一开始就是当时的最新版5.6.26。emoji再转码的方法希望只作为最后的解决办法。
回复内容:
问题是这样的:
有一数据库,里面有很多表,也有很多已存在的数据,这些数据多数都是用utf8存储的(不全是,还有latin1的)。
遇到了用户存emoji导致存储失败的问题,已知是需要utf8mb4才能正确存储。
已经把mysql从5.1升级到5.6.26了。接下来的想法和已有的尝试:
1、如果把整个数据库都更新成uft8mb4的话,风险太大,因为各种调用的地方乱七八糟,维护不良,直接变成utf8mb4的话可能整个系统都不正常。
2、考虑只把用户会存储emoji的表(以下简称表E)更新成uft8mb4,然而这里系统用的是thinkphp写的,编码设置是放在config.php中的,修改这里的话,thinkphp就全灭了。
3、接着2考虑的话,thinkphp主体仍然用uft8不变,仅在查询这个表E的时候临时使用uft8mb4进行查询。尝试M()->query('SET NAMES \'utf8mb4\'');
结果报错:SQLSTATE[HY000]: General error
4、仍然考虑2的方法发现也不行。因为即使查询了这个表E成功之后,又会进行其他表的操作,uft8mb4又可能会导致接下来的查询出错。
求助有没有好的办法能只针对这一个表进行以utf8mb4为编码的操作,并且还不影响其他表的操作。
PS:因为生产环境已经上线一年了已有很多数据和在线用户,而现在测试才报出来有这个问题。数据库整体更新编码实在风险太大,领导的意思是哪有坑先填哪,没发现的坑就假装没看见。
幸运的是生产环境当时搭建系统时是我安装的,mysql一开始就是当时的最新版5.6.26。emoji再转码的方法希望只作为最后的解决办法。
内容总结
以上是互联网集市为您收集整理的emoji-thinkphpmysql如何对指定表使用指定字符编码进行查询和操作?全部内容,希望文章能够帮你解决emoji-thinkphpmysql如何对指定表使用指定字符编码进行查询和操作?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。