我以前问过这个问题,但帖子被标记为与这个问题重复并被删除。
我已经仔细阅读了这篇文章,并尝试了所有的建议。不幸的是,这篇文章并没有解决我目前遇到的问题。关于删除问题的通知让我提了一个新问题。
原始问题:
我最近转移到一个不同的托管提供商与数据库备份的前一个供应商。
不知何故,数据库值不再正确显示。
例如,不同的语言 信長の野望・創造 パワーアップキット
将输出为 ä¿¡é•·ã®é‡Žæœ›ãƒ»å‰µé€
.
标题中的商标图标,如 ™
将显示为 â„¢
.
我能做些什么来解决这个问题?考虑到数据库是1:1,我不知道这里有什么问题。
我做了什么
我的整个数据库都设置为 latin1_swedish_ci
. 我把它改成了 utf8mb4_unicode_ci
. 这没有任何改变。
我已经指定了 charset=utf8mb4
在pdo-mysql连接dsn中。
我已经将默认字符集设置为utf8。
我有什么遗漏/可以做的来解决这个问题吗?
小更新:上传数据库到我的本地数据库似乎输出正确,这是一个1:1的安装。这很令人沮丧。
网页有utf8编码标签。
php信息显示网页以utf8格式显示。
31-7-2020:
正在运行查询
SHOW SESSION VARIABLES LIKE 'character_set_%'; SHOW SESSION VARIABLES LIKE 'collation_%';
给了我以下结果:
"character_set_client" "utf8mb4"
"character_set_connection" "utf8mb4"
"character_set_database" "utf8mb4"
"character_set_filesystem" "binary"
"character_set_results" "utf8mb4"
"character_set_server" "utf8mb4"
"character_set_system" "utf8"
"character_sets_dir" "/usr/share/mysql/charsets/"
"collation_connection" "utf8mb4_general_ci"
"collation_database" "utf8mb4_unicode_ci"
"collation_server" "utf8mb4_unicode_ci"
正在运行查询 SET character_set_results = NULL; SET character_set_results = binary;
没有给出任何结果。
4条答案
按热度按时间irtuqstp1#
更改数据库中的排序规则或字符集不会更改现有的列和表排序规则设置。类似地,更改列的字符集不会更改列中的现有数据。查看每列设置使用的内容。从那里开始。
从information\u schema.columns中选择column\u name、character\u set\u name、collation\u name
在mysql客户机中,运行以下命令查看连接设置是什么
显示会话变量,如“character_uset_uu%”;显示“collation%”等会话变量;
在mysql客户机中,您可以要求服务器不要进行任何转换,并查看这是否有帮助(即执行
SELECT
在table上,看看它看起来怎么样)。set character\u set\u results=null;set character\u set\u results=二进制;
请参阅此处了解更多详细信息
https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html
7vux5j2d2#
试试这个=
1-选择数据库=>
Operations
=>Collation = utf8mb4
2-执行此=mysql_query("SET CHARACTER SET utf8")
;3-写入标题=
header('Content-Type: text/html; charset=utf-8');
4-将所有字符转换为普通字符=aoyhnmkz3#
这不是文件或数据库。当您第一次连接到mysql服务器时,就会设置“bug”。
当您连接到mysql服务器时,需要提供一个编码,否则服务器将返回默认值,即:
latin1
所以,与其这样联系:一定要这样连接:
一旦像这样连接,就需要重新导入整个数据库。
我通常是这样做的:
lg40wkob4#
这12个十六进制字符
E4BFA1 E995B7 E381AE E9878E
,当作为mysql的CHARACTER SET
utf8(或utf8mb4)将显示为信長の野
. 如果视为拉丁语1,则显示为ä¿¡é•·ã®é‡Ž
. 这个词叫做mojibake。这告诉我问题可能出在输出端。但请提供
SELECT HEX(col)...
从你的table上。它应该给你e4…,但它可能给你C3A4C2BFC2A1C3A9E280A2C2B7C3A3C281C2AEC3A9E280A1C5BD
. 在本例中,您有一个不同的问题——即“双重编码”,它发生在输入端。或者在转换的时候。双重编码是特别讨厌的,因为它显示正确,而被错误地存储。到这里来看看更多关于mojibake和双重编码。
同样地
™
(e284a2)-->â„¢
,实际上可能存储为c3a2e2809ec2a2。“网页有utf8编码标签。”——很好。但是浏览器倾向于宽容。也就是说,浏览器可能会看到双重编码并在屏幕上为您“修复”它。
http://mysql.rjweb.org/doc.php/charcoll#fixes_for_various_cases 为各种情况提供修复,但首先您需要仔细决定您真正拥有的情况。