V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tianxiacangshen
V2EX  ›  PHP

mysql 中ñ,í,ó 该设置什么编码保存?

  •  
  •   tianxiacangshen · 2017-07-05 20:21:36 +08:00 · 2610 次点击
    这是一个创建于 2705 天前的主题,其中的信息可能已经有所发展或是发生改变。
    utf8_general_ci 不行
    utf8mb4_general_ci 也不行,其他 latin1 latin2 latin5 也都试了还是不行
    14 条回复    2017-07-06 10:42:50 +08:00
    cxbig
        1
    cxbig  
       2017-07-05 20:32:58 +08:00
    utf8_general_ci 绝对没有问题
    你这恐怕是提交的编码不是 UTF-8 的,确保 PHP 这边的输入输出都是 UTF-8 才行
    imydou
        2
    imydou  
       2017-07-05 20:41:18 +08:00
    UTF8MB4_UNICODE_CI
    we3613040
        3
    we3613040  
       2017-07-05 20:48:09 +08:00
    base64 存
    zjp
        4
    zjp  
       2017-07-05 20:53:35 +08:00 via Android
    编码 utf8mb4,排序规则 utf8mb4_unicode_ci
    tianxiacangshen
        5
    tianxiacangshen  
    OP
       2017-07-05 20:58:52 +08:00
    @cxbig 获取到的数据是 iso-8859-15 编码,用 iconv 函数转换了一下编码,然后保存的,utf8_general_ci 和 UTF8MB4_UNICODE_CI 都将特殊字符变成了问号
    tianxiacangshen
        6
    tianxiacangshen  
    OP
       2017-07-05 21:05:02 +08:00
    @cxbig
    @imydou
    @we3613040
    @zjp

    iconv 函数貌似不行,utf8_encode 可以
    imydou
        7
    imydou  
       2017-07-05 21:08:28 +08:00
    UTF8MB4_UNICODE_CI 应该可以,emoji 都能存
    littleylv
        8
    littleylv  
       2017-07-05 21:18:14 +08:00
    utf8 肯定是可以的。你在存之前先看看是什么编码?
    panyanyany
        9
    panyanyany  
       2017-07-05 21:41:07 +08:00
    iconv 会调用系统自带的 iconv 命令,这个命令在不同系统下有不同的表现,而且在 *nux 系统下有巨坑。
    php 最好是用 mb_convert_encoding,这是 php 自己实现的转换函数,性能稳定不会出错。
    fuxkcsdn
        10
    fuxkcsdn  
       2017-07-05 21:54:14 +08:00 via iPhone
    数据库链接有设置编码吗?
    $dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1; charset=utf8', $user, $password);
    tianxiacangshen
        11
    tianxiacangshen  
    OP
       2017-07-05 21:56:19 +08:00
    @littleylv
    @fuxkcsdn
    @panyanyany

    之前是 iso-8859-15 编码,用 iconv 方式转换没效果,不知道什么原因,我还以为是 mysql 编码问题,换成 utf8_encode 就好了
    frienmo
        12
    frienmo  
       2017-07-05 22:22:05 +08:00
    最近遇到的是带有 accent 的字母=原来的字母,后来查了是 collation 的问题
    mingyun
        13
    mingyun  
       2017-07-05 22:30:44 +08:00
    @panyanyany 什么巨坑
    winglight2016
        14
    winglight2016  
       2017-07-06 10:42:50 +08:00
    这是西语字母啊,小撇是重音符号,字符集一定要保证输入输出一致,你直接用 mysql 命令行试试看写入读出就知道问题在哪里了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2695 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:17 · PVG 17:17 · LAX 01:17 · JFK 04:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.