请问要把 字符存在 MySQL 表里的话,如何申明字段定义? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
sdjl

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

  •  
  •   sdjl Dec 7, 2018 4968 views
    This topic created in 2701 days ago, the information mentioned may be changed or developed.
    对,就是这个字符:

    我目前的字段申明是:

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

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

    google 搜了半天了,都是说用 utf8mb4 就好了,但实践通不过,在线等~
    30 replies    2018-12-08 17:26:32 +08:00
    sdjl
        1
    sdjl  
    OP
       Dec 7, 2018
    回复必感谢!( 24 小时内)
    xiangyuecn
        2
    xiangyuecn  
       Dec 7, 2018   1
    来了收割一波,不知道 mysql 有没有 n 打头的类型,nvarchar
    baocaixiong
        3
    baocaixiong  
       Dec 7, 2018   1
    ```
    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
        4
    naic  
       Dec 7, 2018   1
    ![微信图片_20181207192915.png]( https://i.loli.net/2018/12/07/5c0a59d8b966f.png)
    ![微信图片_20181207192933.png]( https://i.loli.net/2018/12/07/5c0a59d94587f.png)
    应该是可以的
    naic
        5
    naic  
       Dec 7, 2018   1
    回复要怎上图……

    ![微信图片_20181207193139.png]( https://i.loli.net/2018/12/07/5c0a5a21a68e9.png)
    baocaixiong
        6
    baocaixiong  
       Dec 7, 2018   1
    @naic 直接贴图片地址,前后留空
    naic
        7
    naic  
       Dec 7, 2018   1
    @baocaixiong 请不要在每一个回复中都包括外链,这看起来像是在 spamming
    尴尬
    sdjl
        8
    sdjl  
    OP
       Dec 7, 2018
    @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
        9
    zeraba nbsp;
       Dec 7, 2018 via Android   2
    你的客户端也需要用 mb4 字符集连接
    andylsr
        10
    andylsr  
       Dec 7, 2018 via Android   1
    建表用 utf8mb4_unicode,客户端选一样的字符集即刻
    hlwjia
        11
    hlwjia  
    PRO
       Dec 7, 2018   1
    @zeraba +1 所有能改的地方都得改成 utf8mb4_general_ci
    sdjl
        12
    sdjl  
    OP
       Dec 7, 2018
    @zeraba
    @andylsr

    谢谢,确实可以了。原来如此,我好二~
    fashy
        13
    fashy  
       Dec 7, 2018   1
    show variables like '%character%';
    看下数据库设置,服务器端的是否都已经设置了?
    sdjl
        14
    sdjl  
    OP
       Dec 7, 2018
    @fashy 我链接时没有用 utf8mb4,现在可以了 :)
    zjp
        15
    zjp  
       Dec 7, 2018   1
    sdjl
        16
    sdjl  
    OP
       Dec 7, 2018
    @zjp 不是每一个字段都需要 utf8mb4,一劳永逸的话会不会占用更多的磁盘空间?
    zjp
        17
    zjp  
       Dec 7, 2018   1
    @sdjl UTF8 是变长编码,占用更多磁盘空间只是之前 mb3 存不了 4 字节字符。不过会影响 MySQL 对最大字符数的计算
    c00WKmdje2wZLrSI
        18
    c00WKmdje2wZLrSI  
       Dec 7, 2018   1
    ![微信图片_20181207193139.png]( https://i.loli.net/2018/12/07/5c0a5a21a68e9.png)
    88250
        19
    88250  
       Dec 7, 2018   1
    迁移历史数据可参考这里 https://hacpai.com/article/1521094110639
    mmdsun
        20
    mmdsun  
       Dec 7, 2018 via Android   1
    就是 MySQL UTF-8 的 bug。得用 utf8mb4
    Livid
        21
    Livid  
    MOD
    PRO
       Dec 7, 2018   2
    yemoluo
        22
    yemoluo  
       Dec 7, 2018   1
    @88250 谢谢了
    fanmouji
        23
    fanmouji  
       Dec 7, 2018 via Android   1
    做过保存微信用户昵称,MySQL5.7+,如果是通过代码保存的话 utf-8 编码,数据库字段用 varchar
    edsgerlin
        24
    edsgerlin  
       Dec 8, 2018   2
    如果有幸用 MySQL 8.0+的话,推荐用`utf8mb4_0900_ai_ci`,这个能支持 Unicode 9.0 新增的字符。
    Techzero
        25
    Techzero  
       Dec 8, 2018 via Android   1
    关键词 utf8mb4
    winglight2016
        26
    winglight2016  
       Dec 8, 2018   1
    我就奇怪,表情这种设置服务端肯定没问题的,那就只剩客户端的问题了,lz 下次记得用排除法
    echisan
        27
    echisan  
       Dec 8, 2018 via iPhone   1
    学习了
    leonard916
        28
    leonard916  
       Dec 8, 2018   1
    UTF16
    sdjl
        29
    sdjl  
    OP
       Dec 8, 2018
    @Livid 谢谢版主,我把备份的字符集也改了 :)
    DRcoding
        30
    DRcoding  
       Dec 8, 2018   1
    很久前遇到过,改字符集是简单省事,但是不至于为了存个 emoji 改字符集。。。前端转码,或者我看到 TX 某客户端的做法是整理搞了个 emoji 字符的对应关系,全部存成了对应或相近的图片。
    About     Help     Advertise     Blog     API     FAQ     Solana     838 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 65ms UTC 20:40 PVG 04:40 LAX 13:40 JFK 16:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86