首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL中的 utf8 并不是真正的UTF-8编码 ! !

记得去年我在往MySQL存入emoji表情??时,一直出错,无法导入。后来找到办法 -- 通过把utf8改成utf8mb4就可以了,并没有深究。...一年后,我看到一篇文章讲到emoji文字占4个字节,通常要用utf-8去接收才行,其他编码可能会出错。我突然想到去年操作MySQL把utf8改成utf8mb4的事儿。 嗯?...目录 一、报错回顾 二、MySQL中utf8的趣事 1. utf8mb4 才是真正的UTF-8 2. utf8 的简史 三、总结 一张照片背后的故事 ---- 一、报错回顾 将emoji文字直接写入SQL...在这里Mark一下:所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。 ? 那么什么是编码?什么是 UTF-8?...所以,大家以后再搭建MySQL、MariaDB数据库时,记得将数据库相应编码都改为utf8mb4。终有一天,接你班儿的程序员发或你的领导现这个问题后,一定会在心里默默感到你的技术牛B。

88510

知乎面试官:为什么不建议在 MySQL 中使用 UTF-8?

作者:_陈哈哈 blog.csdn.net/qq_39390545/article/details/106946166 “记得去年我在往MySQL存入emoji表情??时,一直出错,无法导入。...后来找到办法 -- 通过把utf8改成utf8mb4就可以了,并没有深究。 一年后,我看到一篇文章讲到emoji文字占4个字节,通常要用utf-8去接收才行,其他编码可能会出错。...” 一、报错回顾 将emoji文字直接写入SQL中,执行insert语句报错; INSERT INTO `csjdemo`....在这里Mark一下:所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。 ? 那么什么是编码?什么是 UTF-8?...所以,**大家以后再搭建MySQL、MariaDB数据库时,记得将数据库相应编码都改为utf8mb4。**终有一天,接你班儿的程序员发或你的领导现这个问题后,一定会在心里默默感到你的技术牛B。

68020
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    面试官问:为什么 MySQL 中的 utf8 并不是真正的 UTF-8 编码?

    记得去年我在往MySQL存入emoji表情时,一直出错,无法导入。后来找到办法 -- 通过把utf8改成utf8mb4就可以了,并没有深究。...一年后,我看到一篇文章讲到emoji文字占4个字节,通常要用utf-8去接收才行,其他编码可能会出错。我突然想到去年操作MySQL把utf8改成utf8mb4的事儿。 嗯?他本身不就是utf8编码么!...在这里Mark一下:所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。 那么什么是编码?什么是 UTF-8?...在这个不合法的字符集发布了之后,MySQL 就无法修复它,因为这样需要要求所有用户重新构建他们的数据库。最终,MySQL 在 2010 年重新发布了“utf8mb4”来支持真正的 UTF-8。...所以,大家以后再搭建MySQL、MariaDB数据库时,记得将数据库相应编码都改为utf8mb4。终有一天,接你班儿的程序员发或你的领导现这个问题后,一定会在心里默默感到你的技术牛B。

    1.2K00

    为什么不建议在 MySQL 中使用 UTF-8?

    在往MySQL存入emoji表情时,一直出错,无法导入。后来找到办法 -- 通过把 utf8 改成 utf8mb4 就可以了,并没有深究. 嗯?他本身不就是utf8编码么!那我当时还改个锤子?...一、报错回顾 将emoji文字直接写入SQL中,执行 insert 语句报错; INSERT INTO `csjdemo`....在这里Mark一下:所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。 那么什么是编码?什么是 UTF-8?...在这个不合法的字符集发布了之后,MySQL 就无法修复它,因为这样需要要求所有用户重新构建他们的数据库。最终,MySQL 在 2010 年重新发布了“utf8mb4”来支持真正的 UTF-8。...所以,大家以后再搭建MySQL、MariaDB数据库时,记得将数据库相应编码都改为utf8mb4。终有一天,接你班儿的程序员发或你的领导现这个问题后,一定会在心里默默感到你的技术牛B。

    71810

    腾讯面试官:为什么不建议在 MySQL 中使用 UTF-8?

    一、报错回顾 将emoji文字直接写入SQL中,执行insert语句报错; INSERT INTO `csjdemo`....整理了一份非常详细的MySQL学习笔记,可以看一下。 但emoji符号占4个字节,一些较复杂的文字、繁体字也是4个字节。所以导致写入失败,应该改成utf8mb4。...在这里Mark一下:所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。 [strip] 那么什么是编码?什么是 UTF-8?...在这个不合法的字符集发布了之后,MySQL 就无法修复它,因为这样需要要求所有用户重新构建他们的数据库。最终,MySQL 在 2010 年重新发布了“utf8mb4”来支持真正的 UTF-8。...所以,大家以后再搭建MySQL、MariaDB数据库时,记得将数据库相应编码都改为utf8mb4。终有一天,接你班儿的程序员发或你的领导现这个问题后,一定会在心里默默感到你的技术牛B。

    36320

    typecho 如何支持emoji

    typecho 默认的数据库不支持emoji,所以需要通过一下方式修改数据库的编码。如果你的数据库不支持emoji,但是在文章编辑中或者主题设置中使用了emoji会导致你的内容丢失!...alter table typecho_comments convert to character set utf8mb4 collate utf8mb4_unicode_ci;alter table...set utf8mb4 collate utf8mb4_unicode_ci;alter table typecho_options convert to character set utf8mb4...;执行上述sql语句来修改表的编码,如果用的是宝塔面板和MySQL数据库,一般有可视化的phpmyadmin界面,可以在phpmyadmin的控制台里面执行上面的语句,如果是服务器可以在服务器上连接mysql...最后将 Typecho 目录下的config.inc.php 配置文件中数据库定义参数中的 charset 为 utf8mb4: $db->addServer(array ( 'host'

    36640

    MySQL不要再用utf8了

    '蔡坨坨', 'a' ), ( 6, '蔡坨坨', '*' ); 通过以下SQL语句可以清晰对比以下所占的字符数和字节数: SELECT * ,CHAR_LENGTH(emoji) as '字符'...,LENGTH(emoji) as '字节' FROM user_info; 如上图所示,这是将编码改成utf8mb4之后插入的数据,其中数字、英文字母、特殊符号占1个字节,中文占3个字节,但emoji...但是,他们并没有对新的字符集utf8mb4广而告之,可能是因为这个Bug让他们很尴尬,以至于很多人都还默认使用utf8,并且现在网络仍然建议开发者使用utf8,这些建议其实是错误的。...所有还在使用utf8编码格式的MySQL和MariaDB用户都应该改成utf8mb4,且不再使用utf8,避免出现类似的问题。...所以大家以后在搭建MySQL、MariaDB数据库时,记得将数据库的编码格式设置为utf8mb4。 以上,完。 脚踏实地,仰望星空,和坨坨一起学习软件测试,升职加薪!

    2.1K20

    mysql 插入 emoji报错1366

    最近做项目需要用到emoji表情,好不容易把前端搞定,提交数据到后台发现无法插入数据库,异常提示如下: org.springframework.jdbc.UncategorizedSQLException...,仍然无法插入emoji表情,仔细排查了一下是因为字段未修改成utf8mb4,通过下面第一种方法中的字段修改代码修改后即可成功插入。...服务器部署mysql时候,mysql字符集通过my.cnf已经设置成了 utf8mb4,使用的Navicat工具连接数据库,无法直接在数据库表格中添加emoji,仍然会报’\xF0\x9F\x8D\x85...\xF0\x9F…’错误,通过代码写入,可以写入成功,但是在数据库中查看都是???...,这个太坑了,折腾了几个小时仍然没有好,后来用SQLyog客户端工具连接数据库,打开一看都是正常显示,也可以直接在数据库表格中复制粘贴添加emoji表情,不知道是不是Navicat工具的bug。

    1.8K20

    存储emoji表情或特殊字符报错(Incorrect string value: xF0x9Fx98x82xF0x9F...)

    我在一篇文章中使用了emoji表情,前面很顺利,不管是WordPress还是其他博客园啥的,都是正常发送。 但是,我在Typecho系统中发布文章时.... 我当时一脸懵逼,啥情况,数据库坏了?...于是既然是错误,那我就解决一下吧。 首先,我们要知道,utf8是Typecho系统写入数据库是的默认编码,也是安装MySQL是的默认编码。...Typecho 默认是不支持 Emoji 表情的,当你评论中有 Emoji 的话,就会报这个错误。这个是因为编码的问题造成的。...如果你要存互联网emoji表情,就需要utf8mb4,而不是utf-8; 3、utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换; 4、MySQL数据库的 “utf8”并不是真正概念里的...emoji 表情符号的记录时就报错,还是很尴尬的; 6、最重要一点,对数据库操作前,记得备份数据。

    61120

    让Typecho支持emoji表情,修改数据库编码为utf8mb4

    typecho默认编码改为utf8mb4 我们正常在typecho博客编写文章时会发现不支持emoji表情,(比如这些符号,强制保存还会造成数据丢失,很是不解,这是因为typecho1.1的数据库类型默认不支持...emoji编码造成的 在MySQL中,UTF-8只支持最多3个字节,而emoji是4个字节。...所以如果你不修改数据库的话,typecho是无法支持Emoji表情的。...所以我们要手动到数据库进行修改编码,改为utf8mb4即可(请注意php版本在5.6或以上) 教程开始 步骤一 进入PhpMyadmin,选择对应的数据库,选择操作——排序规则——选择utf8mb4_unicode_ci...步骤三 最后在网站根目录config.inc.php配置文件中找到以下代码: 'charset' => 'utf8', 将utf8修改为utf8mb4即可,返回测试一下已经完美支持emoji表情啦(提醒一下

    80720

    Typecho发布文章Database Query Error-星泽V社

    刚才发布文章出现 Database Query Error,百度了问题,原因是 Typecho 在初始化数据库的时候,选用了 UTF-8 的编码,而在 MySQL 中,UTF-8 只支持最多 3...config.inc.php 中数据库定义参数中的 charset 为 utf8mb4 'charset' => 'utf8mb4', 知识拓展 1、MySQL在5.5.3之后增加了这个utf8mb4...如果你要存互联网emoji表情,就需要utf8mb4,而不是utf-8; 3、utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换; 4、MySQL数据库的 “utf8”并不是真正概念里的...现在很多指南推荐用户使用“utf8”其实都错了; 5、建议MySQL和MariaDB用户使用“utf8mb4”而不是“utf8”,毕竟现在是不管使用 Anroid 设备,还是 iOS 设备,如果插入包含有...emoji 表情符号的记录时就报错,还是很尴尬的; 6、最重要一点,对数据库操作前,记得备份数据。

    1.5K20

    为什么不要在MySQL中使用UTF-8编码方式

    问题复现 有数据库表如下:utf8编码方式 往数据库存一条记录: @Test public void testInsert() { User user = new User(); user.setUsername...其实\uD83D\uDE00是一个emoji表情。 因为MySQL中utf8字符集只支持三字节UTF-8编码的Unicode范围,而emoji字符属于四字节编码部分,所以程序运行预期是会报错的。...解决问题 虽然MySQL的UTF-8存在缺陷,但是MySQL(包括mariadb)官方却没有修复此bug,而是通过2010年重新发布的“utf8mb4”来支持真正的 UTF-8。...因此想要解决此问题,只能够将MySQL数据库设置为utf8mb4字符集才行。 总结 这个问题,也是因为某次保存数据的时候保存了一个emoji表情才发现的。...其实最早开始用MySQL的时候,就有发现一个utf8mb4了,但是自己却没有却去了解UTF8和UTF8MB4的区别。通过此次教训,以后使用MySQL就老老实实的设置字符集为utf8mb4吧。

    15010

    为什么不要在MySQL中使用UTF-8编码方式

    其实\uD83D\uDE00是一个emoji表情。...image.png 因为MySQL中utf8字符集只支持三字节UTF-8编码的Unicode范围,而emoji字符属于四字节编码部分,所以程序运行预期是会报错的。...解决问题 虽然MySQL的UTF-8存在缺陷,但是MySQL(包括mariadb)官方却没有修复此bug,而是通过2010年重新发布的“utf8mb4”来支持真正的 UTF-8。...因此想要解决此问题,只能够将MySQL数据库设置为utf8mb4字符集才行。 总结 这个问题,也是因为某次保存数据的时候保存了一个emoji表情才发现的。...其实最早开始用MySQL的时候,就有发现一个utf8mb4了,但是自己却没有却去了解UTF8和UTF8MB4的区别。通过此次教训,以后使用MySQL就老老实实的设置字符集为utf8mb4吧。

    99520

    【腾讯云的1001种玩法】几种在腾讯云建立WordPress的方法(Linux)(一)

    /html -p # mkdir /srv/www/phpmyadmin/logs 为了能够在系统启动时自动运行 Apache 服务器,需要运行下面的指令: # systemctl enable httpd...安装和配置 MariaDB 数据库服务 MariaDB 是在 MySQL 基础上重建的一个数据库软件,各 Linux 发行版都陆陆续续从 MySQL 切换到了 MariaDB。...安全配置 MariaDB 使用 MariaDB 内建的安全配置脚本进行配置 # mysql_secure_installation 这里需要配置 mysql 根用户和密码、清除其他用户、清除不需要的数据库等...重起 APACHE 使配置生效 # systemctl restart httpd 现在就可以通过 ip:port/phpMyAdmin (将 IP 换为你腾讯云服务器的 IP,端口为前面设置的 phpmyadmin...出现如下图所示页面,单击继续: 输入已经创建的数据库信息: 这一步出错的原因是,网站本身对html文件夹没有读写权限,具体解决方案可以查看本节参考资料链接中关于网站用户权限的讲解。

    12.9K20

    在Ubunt16.04上安装LAMP

    毕竟是最简单易用的,LAMP即为 Linux、Web 服务器 (Apache)、 数据库服务器 (MySQL / MariaDB) 和 PHP (脚本语言)。...数据库服务器的安装(MySQL Server 5.7): MySQL 和 MariaDB 都是 Ubuntu 16.04 中的数据库服务器。...MySQL Server 和 MariaDB Server的安装包都可以在Ubuntu 的默认软件源中找到,我们可以选择其中的一个来安装。通过下面的命令来在终端中安装mysql服务器。...phpMyAdmin的安装: phpMyAdmin 可以让我们通过它的 web 界面来执行所有与数据库管理和其他数据库操作相关的任务,这个安装包已经存在于 Ubuntu 的软件源中。...点击确定来配置 phpMyAdmin 管理的数据库。 指定 phpMyAdmin 向数据库服务器注册时所用的密码。 确认 phpMyAdmin 所需的密码,并点击确认。

    84030

    如果有人问你 MySql 怎么存取 Emoji,把这篇文章扔给他

    对于我们开发者来说,如何将 Emoji 存入 MySql 数据库或者取出来,就变成了一种必须掌握的技能了。 Emoji 是一种图形符号,能够很直观地反应出某种文字含义。它让我想起远古时代的象形文字。...02、糟糕 如果我们直接将 Emoji 表情存入数据库的话,通常会出现下面这个错误。 ?...03、utf8mb4 可以将 MySql 的字符集由 utf8 调整为 utf8mb4。...utf8mb4 是 MySql 在 5.5.3 版本之后增加的一个编码方式,用来兼容四字节的 Unicode(包括 Emoji)。...04、EmojiConverter 更友好的解决方式应该将 Emoji 当做字符串存储,然后在取出来的时候再转成 Emoji,这样可以兼容所有的数据库版本。

    1.3K30

    不可忽视的MySQL字符集

    MySQL的字符集从latin1经过utf8 到utf8mb4 ,算是经历曲折的路线。特别是从使用一个字符集变更另一个字符集时,实践当中都非常无奈,不是没办法,而是麻烦。...再了解一下一些场景下 utf8 和 utf8mb4 的问题点: utf8编码最多支持3字节的数据,而emoji表情符, 偏生字是4个字节的utf8无法存储的,致辞延伸出utf8mb4字符集解决这个问题...常见问题4:表情符,偏生字 常见错误代码:1366 Incorrect string value: ‘\xF0\x9F\x99\x82’ for column ‘name’ at row 2 指定Utf8mb4...擅长MySQL、Redis、MongoDB数据库高可用设计和运维故障处理、备份恢复、升级迁移、性能优化。自学通过了MySQL OCP 5.6和MySQL OCP 5.7认证。...2年多开发经验,10年数据库运维工作经验,其中专职做MySQL工作8年;曾经担任过项目经理、数据库经理、数据仓库架构师、MySQL技术专家、DBA等职务;涉及行业:金融(银行、理财)、物流、游戏、医疗、

    2.1K20
    领券