《php mysql查询中文》正文开始,本次阅读大概5分钟。
今天我们来谈谈如何在PHP MySQL查询中文。把中文存入MySQL是很常见的操作,但是有很多开发者在从MySQL中读取中文时却遇到了一些错误。这篇文章将会帮助你解决这些问题。
首先我们需要确保MySQL中的字符编码和PHP使用的字符编码一致。我们可以在MySQL中使用如下命令查看字符编码:
SHOW VARIABLES LIKE 'character_set%';
接下来在PHP连接MySQL时需要设置字符编码,可以在连接时添加如下参数:
$db_conn = mysqli_connect($host, $username, $password, $dbname); mysqli_set_charset($db_conn, 'utf8mb4');
这样我们就可以保证MySQL与PHP使用的字符编码一致了。
接下来我们需要确保使用正确的函数将中文从MySQL中读取出来。当我们使用mysqli_fetch_assoc方法从MySQL中获取一条记录时,这个记录中的字段值是以UTF-8编码的字符串返回的。如果我们要使用这个字符串作为HTML输出,需要使用htmlspecialchars函数来转义。
$data = mysqli_fetch_assoc($result); echo htmlspecialchars($data['field_name']);
如果我们想要直接输出中文,可以使用如下函数:
$data = mysqli_fetch_assoc($result); echo mb_convert_encoding($data['field_name'], 'HTML-ENTITIES', 'UTF-8');
如果我们在MySQL中存储的是GB2312编码的汉字,可以使用如下函数进行转换:
$data = mysqli_fetch_assoc($result); echo mb_convert_encoding($data['field_name'], 'UTF-8', 'GB2312');
有时候,我们需要检索包含中文的数据。如果我们使用的是LIKE关键字来进行检索,会发现并不能查到包含中文的数据。这是因为默认情况下MySQL会将中文当作二进制数据来处理,而不是UTF-8编码的字符串。
解决这个问题的方法是将检索列的字符集设置为utf8mb4_general_ci。可以使用如下命令修改已有的表:
ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
如果我们使用的是预处理语句,可以在执行查询之前设置字符集:
$stmt = mysqli_prepare($db_conn, "SELECT * FROM table_name WHERE column_name = ?"); mysqli_stmt_bind_param($stmt, "s", $param); mysqli_stmt_execute($stmt); mysqli_stmt_bind_result($stmt, $result); mysqli_stmt_store_result($stmt); mysqli_stmt_fetch($stmt); mysqli_stmt_close($stmt);
最后,我们需要确保我们的PHP文件本身也是以UTF-8编码保存的。如果在PHP文件中直接输出中文而未设置文件编码,可能会出现乱码问题。使用如下代码来设置文件编码:
header('Content-Type:text/html;charset=utf-8');
以上就是在PHP MySQL查询中文时所需注意的问题,如有不当之处请指正。