【发布时间】:2017-06-10 14:00:43
【问题描述】:
我开始在我的开发机器上开发一个 wordpress。 mysql 版本是 5.6,worpdress 是 4.7,所以如果检测到可能,它已经在使用 utf8mb4_unicode_520_ci 编码。
我的问题是在我的主机(mysql 5.5)上,utf8mb4_unicode_520_ci 未被识别为有效编码。因此,我试图以 utf8mb4_unicode_ci 编码为目标,因为我的主机知道这一点,如果我理解正确,这将 - 与使用 utf8 相反 - 允许我保留 4 个字节。
我为数据库尝试了几种不同的编码和排序规则组合,但都没有成功(来自这里How to convert an entire MySQL database characterset and collation to UTF-8?)。
我在 wp-config 中尝试了几种编码和排序规则的组合,但没有。
来自数据库的所有内容(如帖子标题和帖子内容为所有 diatrics 显示错误编码的字符,其他任何内容都正确显示)
我想我需要转换数据库的实际内容,改变字符集和排序规则似乎不够。
我找到了this,但它并没有直接解决我的问题,或者我错过了它。
任何帮助将不胜感激
—————————————————————————————————
更新:
这是我经历的确切过程:
初始情况:
我在本地安装了一个 wordpress (4.6.1)(在我的开发机器上,mysql 5.6.28)。 我在本地开发主题和插件
(此时我在本地有一个utf8_general_ci 的数据库和utf8mb4_unicode_520_ci 的表
问题:
我想在我的主机上部署我的 wordpress(mysql: 5.5 - db collation 似乎是utf8mb4_unicode_ci)。
我在本地 mysqldump 数据库,然后尝试在我的主机的 phpmyadmin 上导入它。
这给出了错误:
Unknown collation: 'utf8mb4_unicode_520_ci'
解决方案 1 将表格字符集更改为 utf8mb4_unicode_ci:
在我的托管 sql 服务器上,utf8mb4_unicode_520_ci 不可用,我无法获得更新版本的 mysql。
utf8mb4_unicode_ci 似乎是最接近的,并且在我的托管 sql 服务器上可用。
根据各种问题,我调整了一个 bash 脚本来更改我的表格的字符集和排序规则
for tbl in wp_sij2017_commentmeta wp_sij2017_comments wp_sij2017_cwa wp_sij2017_links wp_sij2017_options wp_sij2017_postmeta wp_sij2017_posts wp_sij2017_term_relationships wp_sij2017_term_taxonomy wp_sij2017_termmeta wp_sij2017_terms wp_sij2017_usermeta wp_sij2017_users wp_sij2017_woocommerce_api_keys wp_sij2017_woocommerce_attribute_taxonomies wp_sij2017_woocommerce_downloadable_product_permissions wp_sij2017_woocommerce_order_itemmeta wp_sij2017_woocommerce_order_items wp_sij2017_woocommerce_payment_tokenmeta wp_sij2017_woocommerce_payment_tokens wp_sij2017_woocommerce_sessions wp_sij2017_woocommerce_shipping_zone_locations wp_sij2017_woocommerce_shipping_zone_methods wp_sij2017_woocommerce_shipping_zones wp_sij2017_woocommerce_tax_rate_locations wp_sij2017_woocommerce_tax_rates; do
mysql --execute="ALTER TABLE wp_sij_2017_original_copy.${tbl} CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
done
我在本地数据库上运行这个脚本
我现在将所有表格都设置为排序规则utf8mb4_unicode_ci
我的数据库排序规则仍然是utf8
我 mysqldump 数据库,然后将其导入我的主机并...
导入成功。
我在数据库中搜索和替换 siteurl。 然后我访问在线网站,我得到了一些呈现“问号字符”的 diatrics
来自数据库的任何文本都存在解码问题在某些时候
source/html 标记也有那些“问号字符”
我不知道该去哪里看或下一步该做什么
【问题讨论】:
-
您的最后一个链接已损坏。你到底在做什么?从一个系统导出并在另一个系统中导入?如果是这样,您使用什么工具来做到这一点? Wordpress 会自动进行整理/字符集更改/升级。至于您的示例,您是否验证了页面源中的字符类型以及正在使用的编码?
-
嗨@Seth,我更新了最后一个链接(关于mysql CONVERT/CAST 函数)。我想做的是将我的 wordpress 从本地开发人员带到在线。我是怎么做的:我在本地机器终端中mysqldump数据库,然后通过phpmyadmin导入reuslting文件,然后继续对siteurl值进行searchAndreplace。问题是我的本地机器上的编码如果我的托管 sql 服务器无法识别。
-
@seth 我不确定你所说的
the source是什么意思。从 phpmyadmin 咨询时,数据库中的字符格式正确,无论是在我的本地计算机上还是在托管服务器上。在我的 wp 在我的主机上提供的 html 中,所有的 diatrics 都是问号字符。我的 html 中的字符集元标记是 utf8。 -
以兼容模式导出(mysqldump选项
--compatible=mysql4或phpmyadmin中的下拉值mysql40)不能解决问题(来自这个问题:stackoverflow.com/questions/29916610/…) -
源代码中的源代码。如果它在源代码中显示正常但在显示器上显示不正常,您可以假设在 HTML 元标记编码和实际文件编码方面发生了一些有趣的事情。特别是如果文本显示在目标系统上的 phpMyAdmin 中,我宁愿假设在从数据库读取并使用 PHP 处理字符串时出现某种错误。
标签: mysql wordpress encoding utf8mb4