我正在尝试在MySQL表中插入Cyrillic值,但编码存在问题.
PHP的:
<?php
$servername = "localhost";
$username = "a";
$password = "b";
$dbname = "c";
$conn = new mysqli($servername, $username, $password, $dbname);
mysql_query("SET NAMES 'utf8';");
mysql_query("SET CHARACTER SET 'utf8';");
mysql_query("SET SESSION collation_connection = 'utf8_general_ci';");
if ($conn->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();
?>
Run Code Online (Sandbox Code Playgroud)
MySQL的:
| id | search |
| 1 | test ав |
Run Code Online (Sandbox Code Playgroud)
注意:PHP文件是utf-8,数据库排序规则utf8_general_ci
Qir*_*rel 31
你在这里混合API,
mysql_*而mysqli_*不是混合.您应该坚持使用mysqli_(因为无论如何你似乎都是这样),因为mysql_*函数已被弃用,并且完全在PHP7中删除.
你的实际问题是某个地方的字符集问题.这里有一些指示可以帮助您为您的应用程序获得正确的字符集.这涵盖了开发PHP/MySQL应用程序时可能遇到的大多数常见问题.
Format- > Convert to UTF-8 w/o BOM)PHP和HTML中的标题应设置为UTF-8
HTML(内部<head></head>标签):
<meta charset="UTF-8">
Run Code Online (Sandbox Code Playgroud)PHP(在文件的顶部,在任何输出之前):
header('Content-Type: text/html; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)连接到数据库后,将charset设置为您的connection-object的UTF-8,如下所示(直接连接后)
mysqli_set_charset($conn, "utf8"); /* Procedural approach */
$conn->set_charset("utf8"); /* Object-oriented approach */
Run Code Online (Sandbox Code Playgroud)
这是为了mysqli_*mysql_*和PDO 有类似的(见本答案的底部).
还要确保您的数据库和表设置为UTF-8,您可以这样做:
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
(已存储的任何数据都不会转换为正确的字符集,因此您需要使用干净的数据库执行此操作,或者在执行此操作后更新数据(如果存在损坏的字符)).
json_encode(),则可能需要应用该JSON_UNESCAPED_UNICODE标志,否则它会将特殊字符转换为十六进制等效字符.请记住,一切以代码的整个管道需要被设置为UFT-8,否则,你可能在你的应用体验破字.
除了此列表之外,可能还有一些函数具有用于指定字符集的特定参数.手册将告诉你这个(一个例子htmlspecialchars()).
还有多字节字符的特殊功能,例如:strtolower()不会降低多字节字符,因为您必须使用mb_strtolower(),请参阅此实时演示.
注1:请注意,它的位置标记为
utf-8(带有破折号),而某个位置标记为utf8(没有它).重要的是你知道何时使用哪种,因为它们通常是不可互换的.例如,HTML和PHP需要utf-8,但MySQL不需要.注2:在MySQL中,"charset"和"collation"不是一回事,请参阅编码和整理之间的区别?.两者都应该设置为utf-8; 通常整理应该是
utf8_general_ci或者utf8_unicode_ci,参见UTF-8:一般?滨?Unicode的?.注3:如果您使用的是emojis,则需要在数据库和连接中使用
utf8mb4charset而不是标准来指定MySQLutf8.HTML和PHP就会有UTF-8.
使用mysql_和PDO 设置UTF-8
PDO:这是在您的对象的DSN中完成的.注意charset属性,
$pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8", "user", "pass");
Run Code Online (Sandbox Code Playgroud)mysql_:这与mysqli_*它非常相似,但它不会将connection-object作为第一个参数.
mysql_set_charset('utf8');
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
17927 次 |
| 最近记录: |