gpt4 book ai didi

php - 如何在 MySQL 中转换包含 latin1 字符的 WordPress UTF-8 数据库

转载 作者:行者123 更新时间:2023-11-30 22:21:17 24 4
gpt4 key购买 nike

我正在使用旧的 WordPress 数据库。在后端,一些帖子包含如下字符:

ü

但它们在前端显示为:

ü

在 wp-config.php 中更改 define('DB_CHARSET', 'utf8'); 解决了这个特定问题,但是为了将来的兼容性(请参阅:https://make.wordpress.org/core/2015/04/02/the-utf8mb4-upgrade/),我认为这是一个不好的问题保留数据库原样并希望对其进行转换的想法。直接在 PHP 模板中输入 ü 即可,无需更改任何内容。所以这显然是一个 mySQL 编码问题。

到目前为止,我已经采取了以下步骤:

  1. 从 PHPMyAdmin 运行以下命令:

更改数据库 MyDb 字符集 utf8;

ALTER TABLE wp_posts CHARACTER SET utf8;

UPDATE wp_posts SET post_content = convert(cast(convert(post_content using latin1) as binary) using utf8)(取自此处:MySQL - Convert latin1 characters on a UTF8 table into UTF8)

我也用过这个工具:https://interconnectit.com/products/search-and-replace-for-wordpress-databases/将所有表转换为 utf-8 mb4 编码。

alter table wp_posts change post_content post_content LONGTEXT CHARACTER SET latin1;
alter table wp_posts change post_content post_content LONGBLOB;
alter table wp_posts change post_content post_content LONGTEXT CHARACTER SET utf8;
  1. 我也尝试过这种方法: http://alexking.org/blog/2008/03/06/mysql-latin1-utf8-conversion

  2. 完全清空 wp_posts 并尝试输入新帖子。

使用所有这些方法,当创建一个新帖子并输入一个 ü 字符时,它仍然显示为 ü

这里的这个线程也清楚地描述了我遇到的问题: https://wordpress.org/support/topic/trouble-converting-database-containing-special-characters-to-utf-8

非常感谢这里的任何建议或见解,因为我完全被困住了!

谢谢

最佳答案

数据库和表声明分别只是 future 表和列声明的默认值。

ALTER TABLE CHANGE ... 更改声明而不转换编码。也就是说,这可能让事情变得更糟。

首先,让我们验证一下您拥有什么。请为感兴趣的表提供 SHOW CREATE TABLE。并为其中一些应该有重音字符的数据提供这个,例如 ü:

SELECT col, HEX(col) FROM tbl WHERE ...

如果 HEX 是 FC,那么你有 latin1 编码。如果该列显示 CHARACTER SET latin1,则它们是一致的。 (所有 latin1 编码都是 1 个字节。)

如果 HEX 是 C3BC,则您使用的是 utf8 编码。如果该列显示 CHARACTER SET utf8(或 utf8mb4),则它们是一致的。 (重音字符的 utf8 编码通常是 2 个字节。)

如果编码和字符集不一致,则 panic 。你有一个烂摊子需要清理。

“输入”数据时,有两件事很重要:(1) 字符的编码,以及 (2) 客户端认为 编码是什么。编码取决于您从哪里获得字符(您如何输入、粘贴等)。您告诉客户端以各种方式告诉 mysqld 编码是什么。 define('DB_CHARSET', 'utf8'); 是 WordPress 需要的; phpmyadmin 还需要其他东西。

只要正确配置客户端,列的CHARACTER SET是否相同都无所谓。转换将自动发生。 (但是,最好在所有阶段都保持一致——utf8(或 utf8mb4)。)

ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4; 将主动更改CHARACTER SET该表所有列中的字节。无论数据当前是 latin1 还是 utf8,这都会起作用,但它必须与声明一致(如上所述)。

关于php - 如何在 MySQL 中转换包含 latin1 字符的 WordPress UTF-8 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36563481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com