Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
排序规则latin1_swedish_ci中的MySQL表我可以在不影响PHP代码的情况下进行更改吗?_Php_Mysql_Collation - Fatal编程技术网

排序规则latin1_swedish_ci中的MySQL表我可以在不影响PHP代码的情况下进行更改吗?

排序规则latin1_swedish_ci中的MySQL表我可以在不影响PHP代码的情况下进行更改吗?,php,mysql,collation,Php,Mysql,Collation,我使用排序规则latin1_swedish_ci设置了一个MySQL表。 我已经用UTF-8字符集编写了我的PHP脚本。这一切都进行得很顺利,直到我发现一个人用非瑞典字符输入了自己的名字。 Helén这个名字在数据库中看起来很奇怪,但在网页上看起来还行 我的问题是,我可以简单地将表的排序规则从latin1_swedish_ci更改为UTF-8吗 它实际上会导致任何问题吗?您可以通过添加 $db->set_charset("utf8"); // MySQL mb_internal_encod

我使用排序规则latin1_swedish_ci设置了一个MySQL表。 我已经用UTF-8字符集编写了我的PHP脚本。这一切都进行得很顺利,直到我发现一个人用非瑞典字符输入了自己的名字。 Helén这个名字在数据库中看起来很奇怪,但在网页上看起来还行

我的问题是,我可以简单地将表的排序规则从latin1_swedish_ci更改为UTF-8吗


它实际上会导致任何问题吗?

您可以通过添加

$db->set_charset("utf8"); // MySQL
mb_internal_encoding("UTF-8"); // Set PHP encoding
header("Content-Type: text/html; charset=utf-8"); // Prevent incorrect encoding in Browser
在顶部,使用

$param=$db->escape_string($param);
然后MySQL/PHP将为您处理所有与编码相关的事情。当你这么做的时候,你所有的东西都将是UTF-8

您的名称问题可能与header命令有关,这意味着浏览器选择的字符集不是PHP。您可以通过以下方式修复数据:

$data=utf8_encode($data);
如果结果不好,请尝试以下方法:

$data=utf8_decode($data);
在那之后,一切都会好起来

如果您想使UTF8成为默认字符集,请考虑在my[LydL]中添加my.CNF如下:

# Set UTF-8 as standard
collation-server = utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4

这就是我所做的,我在这篇文章中提到的所有东西,经过一年的开发,我都没有遇到任何问题。

这里讨论的是字符集而不是排序规则,我认为您应该在php代码中连接到数据库后,将其放在这里:mysql_query'set NAMES utf8',但我不确定我没有把它作为一个答案,拉丁文1编码可以完美地表达出来,这不是问题所在。问题是连接编码@好的。那么这是否意味着我实际上没有对此做任何事情,或者我需要做一些更改?您需要按照上面链接到站点中所述修复连接编码。数据库编码良好;只要您只需要存储西文字符,拉丁1编码就可以存储。如果还需要存储其他字符,则应使用UTF-8。mb_内部_编码仅与mb_函数相关,而与其他函数无关。utf8_编码和_解码通常是完全不必要的,编码转换最好在别处处理。PHP从不为您处理任何与编码相关的事情。您只需要在不同系统之间的每个接口上都正确地使用它。抱歉,您的帖子主要是编码相关函数的随机累积,没有真正解释正在发生什么或需要发生什么。