请问要把 🎉 字符存在 MySQL 表里的话,如何申明字段定义?

2018-12-07 19:21:42 +08:00
 sdjl
对,就是这个字符: 🎉

我目前的字段申明是:

content varchar(300) charset utf8mb4 collate utf8mb4_general_ci default '';

但会报错:ERROR 1366 (HY000): Incorrect string

google 搜了半天了,都是说用 utf8mb4 就好了,但实践通不过,在线等~
4363 次点击
所在节点    程序员
30 条回复
sdjl
2018-12-07 19:22:28 +08:00
回复必感谢!( 24 小时内)
xiangyuecn
2018-12-07 19:26:25 +08:00
来了收割一波,不知道 mysql 有没有 n 打头的类型,nvarchar
baocaixiong
2018-12-07 19:30:48 +08:00
```
CREATE TABLE `test` (
`id` bigint(20) unsigned NOT NULL auto_increment,
content varchar(300) default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 collate=utf8mb4_general_ci;

insert into test (content)values( "🎉");
```
naic
2018-12-07 19:30:53 +08:00
![微信图片_20181207192915.png]( https://i.loli.net/2018/12/07/5c0a59d8b966f.png)
![微信图片_20181207192933.png]( https://i.loli.net/2018/12/07/5c0a59d94587f.png)
应该是可以的
naic
2018-12-07 19:32:10 +08:00
回复要怎上图……

![微信图片_20181207193139.png]( https://i.loli.net/2018/12/07/5c0a5a21a68e9.png)
baocaixiong
2018-12-07 19:32:56 +08:00
@naic 直接贴图片地址,前后留空
naic
2018-12-07 19:34:26 +08:00
@baocaixiong 请不要在每一个回复中都包括外链,这看起来像是在 spamming
尴尬
sdjl
2018-12-07 19:36:11 +08:00
@baocaixiong 我把你的代码复制过去也不行呢。

mysql> CREATE TABLE `test` (
-> `id` bigint(20) unsigned NOT NULL auto_increment,
-> content varchar(300) default '',
-> PRIMARY KEY (`id`)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 collate=utf8mb4_general_ci;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test (content)values( "🎉");
ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x8E\x89' for column 'content' at row 1

我的 MySQL 版本是:
Server version: 5.7.24 MySQL Community Server (GPL)
zeraba
2018-12-07 19:38:29 +08:00
你的客户端也需要用 mb4 字符集连接
andylsr
2018-12-07 19:39:52 +08:00
建表用 utf8mb4_unicode,客户端选一样的字符集即刻
hlwjia
2018-12-07 19:41:15 +08:00
@zeraba +1 所有能改的地方都得改成 utf8mb4_general_ci
sdjl
2018-12-07 19:42:22 +08:00
@zeraba
@andylsr

谢谢,确实可以了。原来如此,我好二~
fashy
2018-12-07 19:42:57 +08:00
show variables like '%character%';
看下数据库设置,服务器端的是否都已经设置了?
sdjl
2018-12-07 19:44:51 +08:00
@fashy 我链接时没有用 utf8mb4,现在可以了 :)
zjp
2018-12-07 19:46:37 +08:00
sdjl
2018-12-07 19:47:48 +08:00
@zjp 不是每一个字段都需要 utf8mb4,一劳永逸的话会不会占用更多的磁盘空间?
zjp
2018-12-07 19:51:06 +08:00
@sdjl UTF8 是变长编码,占用更多磁盘空间只是之前 mb3 存不了 4 字节字符。不过会影响 MySQL 对最大字符数的计算
c00WKmdje2wZLrSI
2018-12-07 20:18:09 +08:00
![微信图片_20181207193139.png]( https://i.loli.net/2018/12/07/5c0a5a21a68e9.png)
88250
2018-12-07 21:07:17 +08:00
迁移历史数据可参考这里 https://hacpai.com/article/1521094110639
mmdsun
2018-12-07 21:14:15 +08:00
就是 MySQL UTF-8 的 bug。得用 utf8mb4

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/515477

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX