为什么PHP/MySQL以不同的方式插入我的中文字符?
好的 在尝试使用mysqlnd从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") 表和相关字
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数据库表中显示不同
SET NAMES UTF-8
SET CHARACTER SET UTF-8
指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连接中就成功了。为什么一张桌子上有汉字,而另一张桌子上没有汉字,这仍然是个谜!谢谢你的帮助!