MySQL和PHP:使用Cyrillic字符的UTF-8
MySQL和PHP:使用Cyrillic字符的UTF-8
我正在尝试在MySQL表中插入一个使用Cyrillic字符的值,但是出现了编码问题。
PHP代码如下:
connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "UPDATE `c`.`mainp` SET `search` = 'test тест' WHERE `mainp`.`id` = 1;"; if ($conn->query($sql) === TRUE) { } $conn->close(); ?>
MySQL表如下:
| id | search |
| 1 | test тест |
注意:PHP文件为utf-8编码,数据库采用utf8_general_ci校对规则。
在MySQL和PHP中使用Cyrillic字符时出现了UTF-8编码的问题。解决这个问题的方法是使用一些特定的代码。
问题的原因是MySQL默认使用Latin1编码,而Cyrillic字符需要使用UTF-8编码来正确显示。因此,需要在与MySQL建立连接后,将数据库的编码设置为UTF-8。
在以前的方法中,我们使用了mysql_query函数来设置编码。代码如下:
mysql_query("SET NAMES 'utf8';");
然而,从PHP 5.0.5版本开始,推荐使用mysqli扩展来代替mysql扩展。因此,我们可以使用mysqli_set_charset函数来设置编码。代码如下:
$mysqli->set_charset('utf8');
这样,我们就可以在数据库中正确地存储和检索Cyrillic字符了。
问题的原因是混合使用了mysql_*和mysqli_* API,解决方法是要使用mysqli_*,并确保所有相关设置和代码都使用UTF-8编码。
在解决这个问题之前,我们需要了解一些关于字符集的基本知识。在开发PHP/MySQL应用程序时,以下几点是需要注意的:
1. 应用程序中的所有属性都必须设置为UTF-8。
2. 将文档保存为UTF-8编码,不带BOM。
3. PHP和HTML的头部应该设置为UTF-8。
4. 连接到数据库时,将连接对象的字符集设置为UTF-8。
5. 确保数据库和表的字符集也设置为UTF-8。
6. 如果使用json_encode()函数,可能需要应用JSON_UNESCAPED_UNICODE标志,以避免将特殊字符转换为其十六进制等价物。
7. 在整个代码流水线中,所有内容都必须设置为UTF-8,以避免应用程序中出现乱码问题。
此外,还有一些特定的函数可以用于处理多字节字符,例如strtolower()函数无法将多字节字符转为小写,而需要使用mb_strtolower()函数。
需要注意的是,"utf-8"和"utf8"并不是可以互换使用的,HTML和PHP使用"utf-8",而MySQL则使用"utf8"。
如果应用程序中需要使用表情符号,MySQL需要使用utf8mb4字符集,而不是标准的utf8字符集。
对于使用mysql_*和PDO的情况,设置UTF-8的方法与mysqli_*类似,只是参数的传递方式有所不同。
最后,通过设置$conn->set_charset("utf8")来解决这个问题。现在,也可以在HTML中使用来设置字符集。