V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
baozijianke
V2EX  ›  问与答

PHP PDO mysql insert 中文问题

  •  
  •   baozijianke · 2015-12-16 01:23:43 +08:00 · 1719 次点击
    这是一个创建于 3051 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为编码问题打搅大家真是不好意思。

    环境:
    Windows10
    Apache/2.4.18 (Win32)
    Laravel 5.1
    PHP/7.0.0
    5.7.10-log - MySQL Community Server (GPL)
    服务器字符集: UTF-8 Unicode (utf8)

    我的数据库和表是 UTF8 编码,

    我的代码也使用 UTF8 编码

    代码使用了 Laravel 作为框架,在 Laravel 的框架中,
    ……\vendor\laravel\framework\src\Illuminate\Database\Connection.php
    使用了这么一段代码

    如图中红色圈处所示,我加了一个 var_dump()来显示即将存储的数据,打印得到的是

    _
    出问题的地方就在图中的那段 地址 处,此时地址为 D:\MusicBase\xxx 纯中文的歌曲 1.mp3 。
    在执行完以后,数据库中出现的情况是这样子的

    如果将文件名字全部改为中文, 如 D:\MusicBase\纯中文的歌曲 1.mp3 ,则变为

    感觉像是字符串中 从中文开始以后全部被截断。

    自己在搜索引擎中搜索之后,有人提示在执行 insert 之前先执行 “ set names utf8 ”,我照做之后没有任何改变。
    我突发奇想,将该命令改为 “ set names gbk ”,结果却成功存入数据库,如图

    这到底是为什么?

    4 条回复    2015-12-30 09:06:47 +08:00
    msg7086
        1
    msg7086  
       2015-12-16 01:29:12 +08:00   ❤️ 2
    检查你的输入源。
    如果你 var_dump 打印出来是在 Windows 的 CMD 下,那说明数据是 GBK 的。
    (和你源码的字符集是无关的。
    baozijianke
        2
    baozijianke  
    OP
       2015-12-16 01:53:15 +08:00
    @msg7086 终端我使用的是 Windows 下的 MINGW64 。
    输入源 是使用的 Symfony 框架的 Finder 组件,获得文件和目录地址。
    您提醒我了,我这样做了个实验:同样输出一段地址,分别在 MINGW64 和浏览器上执行。
    在 MINGW64 上
    ![]( )
    在浏览器上
    ![]( )
    浏览器是默认是 UTF-8 编码,在改为 GBK 编码后也能正常显示,这样证明了确实是我的输入源本身就是 GBK 编码。

    非常感谢!!!

    另外,因为我是使用 Symfony 框架的 Finder 组件,输入源是 GBK 编码的原因是该框架的原因还是 Windows 本身的原因? 还是需要具体看代码才能分析?
    msg7086
        3
    msg7086  
       2015-12-16 02:00:15 +08:00
    Finder 是啥?
    你这个是读取本地文件的名字吗?
    Windows 下都是本地编码吧, Linux 下才是 UTF-8 。
    (所以如果你程序准备在 Linux 下跑的,千万别在 Windows 下调测。
    baozijianke
        4
    baozijianke  
    OP
       2015-12-30 09:06:47 +08:00 via iPhone
    @msg7086 嗯,这几天恶补了下编码和字符等知识,确认了,这就是编码的问题。诶,还是走 Linux 吧,不考虑 win 平台了。太坑了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2584 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:58 · PVG 23:58 · LAX 08:58 · JFK 11:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.