这个问题已经在这里有了答案 :
UTF-8贯穿始终 (15个答案)
5个月前关闭。
我正在尝试在MySQL表中插入一个西里尔字母值,但是编码存在问题。
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();
?>
MySQL:
| id | search |
| 1 | test ав |
注意:PHP文件为utf-8
,数据库排序规则utf8_general_ci
您在这里混的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">
PHP (在文件顶部,在任何输出之前):
header('Content-Type: text/html; charset=utf-8');
连接到数据库后,将连接对象的字符集设置为UTF-8,如下所示(直接在连接之后)
mysqli_set_charset($conn, "utf8"); /* Procedural approach */
$conn->set_charset(“utf8”); / Object-oriented approach /
这是针对的mysqli_*
,还有与mysql_*
和PDO 类似的(请参见此答案的底部)。
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
(任何已存储的数据都不会转换为正确的字符集,因此您需要使用干净的数据库来执行此操作,如果字符损坏则需要在执行此操作后更新数据)。
json_encode()
,则可能需要应用该JSON_UNESCAPED_UNICODE
标志,否则它将特殊字符转换为等效的十六进制字符。请记住, 一切 的代码需要被设置为UFT-8的整条管线,否则你可能在你的应用体验破字。
除了此列表之外,可能还有一些具有用于指定字符集的特定参数的函数。手册将告诉您这一点(例如htmlspecialchars()
)。
还有一些针对多字节字符的特殊功能,例如:strtolower()
不会降低多字节字符,因为您必须使用它mb_strtolower()
,请参见此
实时演示
。
注1
:请注意,其某处标记为utf-8
(带破折号),某处标记为(无破折号utf8
)。重要的是要知道什么时候使用,因为它们通常是不可互换的。例如,HTML和PHP需要utf-8
,而MySQL则不需要。注2
:在MySQL中,“字符集”和“排序规则”不是同一回事,请参见编码和排序规则之间的区别?。两者都应设置为utf-8;通常排序规则应为utf8_general_ci
或utf8_unicode_ci
,请参见UTF-8:常规?斌吗
Unicode?。注意3 :如果您使用表情符号,则需要在数据库和连接中使用
utf8mb4
字符集而不是standard 来指定MySQL
utf8
。HTML和PHP将只有UTF-8
。
使用mysql_
和PDO 设置UTF-8
PDO:这是在对象的DSN中完成的。注意该charset
属性,
$pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8", "user", "pass");
mysql_
:这样做非常类似于mysqli_*
,但是它没有将连接对象作为第一个参数。
mysql_set_charset('utf8');
问题内容: 在MySQL中,如果我在UTF-8表中创建一个新字段,是否意味着我可以在该字段中存储32个字节的数据或32个字符(多字节)? 问题答案: 这个答案出现在我的Google搜索结果的顶部,但不正确,所以: 混乱可能是由于测试了不同版本的mysql。 版本4计数字节 版本5包含字符 http://dev.mysql.com/doc/refman/5.0/zh-CN/string-type-
问题内容: 当我写一些西里尔字母的文字System.out.println(“Русскийязык”)-然后使用Windows控制台胜过此╨єёёъшщч√ъ时,该如何解决?文件编码为utf-8,但是没关系,当它是ansii或Windows-1251时,它的输出相同。 问题答案: 请注意,您可能会在输出中看到一些尾随的垃圾(我确实如此),但是如果将输出重定向到文件,则会看到这只是一个显示伪像。
如何使其在输出俄语时,输出俄语字母,而不是�� ����� �������� �����! 它不仅在控制台中工作,而且在终端中一切正常 我试过这个 > 窗口 还有这个 窗户- 还有这个 在eclipse主目录中打开eclipse.ini,或者在STS(Spring Tool Suite)的情况下打开STS. ini,将下面的行放在文件末尾-Dfile.encoding=UTF-8 但还是做不到。请
我正在一个项目,有纯PHP作为后端和MySQL作为数据库。目前,我正在使用ajax来发布和接收来自数据库的数据。但我想使用Websockets的接收部分,使其实时。根据我的搜索和发现,人们引用Node.js、Redis PubSub等来实现它。然而,我没有找到一个关于这个主题的好教程。另外,据我所知,当我在后面运行复杂的PHP算法和MySQL查询时,Nods.js和PHP并不能很好地结合在一起。所
问题内容: 我将PDO库与PHP中的MySQL数据库一起使用,但是如果我插入任何以UTF-8编码的数据(如阿拉伯文字),则会将其插入数据库中,但是为。 在我自己的框架中,创建PDO连接后,我发送两个查询– 和。它仍然不起作用。 例: 解决方法:在将数据插入数据库之前,使用该函数转换数据,并在提取后用于解码。这就是我现在的做法。 问题答案: 采用: 它在PDO连接上强制使用UTF-8。它为我工作。
问题内容: 我一直使用ISO-8859-1编码,但是现在要转到UTF-8。 不幸的是我无法正常工作。 我的MySQL数据库是UTF-8,我的PHP文档是用UTF-8编码的,我设置了UTF-8字符集,但仍然无法使用。 (像æ/ø/å这样的特殊字符不起作用) 希望你们能提供帮助! 问题答案: 确保与数据库的连接也使用此字符集: 根据php.net 的文档: 另请参见:http : //nl3.php.