Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么PHP/MySQL以不同的方式插入我的中文字符?_Php_Mysql_Unicode_Utf 8 - Fatal编程技术网

为什么PHP/MySQL以不同的方式插入我的中文字符?

为什么PHP/MySQL以不同的方式插入我的中文字符?,php,mysql,unicode,utf-8,Php,Mysql,Unicode,Utf 8,好的 在尝试使用mysqlnd从PHP向MySQL数据库中插入一些汉字时,我遇到了一个令人困惑的问题 我有一个表格,接受一些细节,如内部名称,外部名称,镜头名称等 “我进去”语言测试" (语言测试)进入表单中的所有三个字段 我正在使用内部连接提交我的信息,例如: UPDATE table1 INNER JOIN table2(table1.name = "value1", table2.ext_name = "value2", table2.ext_name = "value3") 表和相关字

好的

在尝试使用mysqlnd从PHP向MySQL数据库中插入一些汉字时,我遇到了一个令人困惑的问题

我有一个表格,接受一些细节,如内部名称,外部名称,镜头名称等

“我进去”语言测试" (语言测试)进入表单中的所有三个字段

我正在使用内部连接提交我的信息,例如:

UPDATE table1 INNER JOIN table2(table1.name = "value1", table2.ext_name = "value2", table2.ext_name = "value3")
表和相关字段都设置为utf8\u general\u ci(我也尝试过utf8\u bin)

插入操作正常,但我看到有两个值插入到数据库中

在表一中,我看到“èèèèèèèèèèèèèèè23语言测试“

是什么原因导致我从同一php表单插入的完全相同的数据在两个单独的MySQL数据库表中显示不同

  • 尝试将所有文件保存在不带BOM的UTF-8中

  • 对MySQL执行以下操作:

    SET NAMES UTF-8
    SET CHARACTER SET UTF-8
    

  • 在根文件夹中,使用下一个内容创建文件.htaccess:

    AddDefaultCharset utf-8
    AddCharset utf-8 *
    <IfModule mod_charset.c>
      CharsetSourceEnc utf-8
      CharsetDefault utf-8
    </IfModule>
    
    AddDefaultCharset utf-8
    添加字符集utf-8*
    CharsetSourceEnc utf-8
    字符集默认utf-8
    


  • 在MySQL中,您不仅需要设置表(或其列)的字符编码,还需要设置PHP和数据库之间连接的字符编码,每次连接时都要这样做

    在PHP中,可以使用
    mysql\u set\u charset()
    ,或者如果使用PDO,则可以在数据源名称中包含
    charset=UTF-8


    这将取代MySQL中的
    SET NAMES
    (PHP建议使用此选项)。在旧版本的PHP中,您每次连接时都使用MySQL命令
    SET NAMES UTF8

    请参见:。此外,您可能需要重新启动MySQL服务器和web服务器,然后再次检查表。有时“正确即使在数据库中插入了“错误”的值,值也会被缓存。比较十六进制转储(
    从表中选择十六进制(列)
    ),看看实际数据是否相同。根据描述,我怀疑“表一”的字符编码集错误,而“表二”的字符编码集错误设置正确。您可能是对的-要将其添加为备选答案吗?我的连接用utf8编码,并且两个表和相关字段都设置为utf8。将数组(PDO::MYSQL_ATTR_INIT_COMMAND=>“set NAMES utf8”)添加到PDO连接中就成功了。为什么一张桌子上有汉字,而另一张桌子上没有汉字,这仍然是个谜!谢谢你的帮助!