数据库中的编码问题——PHP

数据库中的编码问题——PHP,php,encoding,Php,Encoding,我已经创建了一个配置文件,它包含在创建的每个文件中。此配置文件需要用于连接数据库,而无需在每个文件中声明。问题是,当我使用查询将数据传递到表中时,编码被破坏了。我已经看到了几种在线解决方案,但是有没有办法将修复集成到配置文件中?这样就不必在每次查询之前设置编码类型。 如果我插入:“这是一项测试”,则在数据库中输入为: “这是一次测试” 这是我的配置文件 define("HOST", "localhost"); define("USER", "root"); define("DATABASE",

我已经创建了一个配置文件,它包含在创建的每个文件中。此配置文件需要用于连接数据库,而无需在每个文件中声明。问题是,当我使用查询将数据传递到表中时,编码被破坏了。我已经看到了几种在线解决方案,但是有没有办法将修复集成到配置文件中?这样就不必在每次查询之前设置编码类型。 如果我插入:“这是一项测试”,则在数据库中输入为: “这是一次测试”

这是我的配置文件

define("HOST", "localhost");
define("USER", "root");
define("DATABASE", "test");
define("PASSWORD", "");
define("SET NAMES 'utf8'"); #> you can do something like that?

您的表中有unicode字符吗? 每当您想要向服务器发送数据时,需要使用“SET NAMES‘utf8’”,这些数据的字符不能用纯ASCII表示,如“ñ”或“ö”

如果MySQL实例没有配置为默认情况下从客户机连接中使用UTF-8编码(根据您的位置和平台,许多都是这样)

请阅读,以防您不知道Unicode是如何工作的


如果您不确定,请尝试从配置文件中删除最后一行,然后再试一次。

首先,您需要运行此查询。然而,将查询放入define中并不是一个好主意,而且这个define在您向我们展示的代码中没有任何名称

所以你可以这样做:

define("DB_ENCODING", 'utf8');
然后在连接数据库后运行查询:

"SET NAMES '".DB_ENCODING."'"
然而,这仍然不是最好的选择。例如,如果您使用mysqli,您可以使用
mysqli\u set\u charset()
,因此实际上您可以使用:

mysqli_set_charset($con, DB_ENCODING);

只需运行查询集名称“UTF8”;连接到数据库后的类内构造函数。但是,如果您在编码方面仍然存在问题,请编写一个运行set names查询的函数,这样您就可以在需要时轻松地调用它。

那些
定义
本身不做任何事情。您需要实际建立连接的代码,在该代码中您需要设置连接编码。这就是您需要编写
设置名称…
或任何更适合您的数据库API的内容的地方。是的,您可以在这里使用
define
来定义该常量,但这不会执行任何代码。这是正确的sintax吗?“设置名称”'.DB_编码。“'插入测试(名称、id、用户)值(?,,?)”否,您应该只运行一次“仅第一个集合名称”查询。然后插入到(不在同一查询中)。因此,首先
“SET NAMES”“.DB_ENCODING”“”
,然后
将测试(名称、id、用户)值(?,?)
确定mysqli_SET_字符集($con,DB_ENCODING);函数,但我得到了以下错误:注意:未定义的变量和警告:mysqli\u set\u charset()期望参数1为mysqli,如果您需要将mysqli\u connect()返回的第一个参数链接设置为null(
)。请看