我开始在我的开发机器上使用wordpress。 mysql版本是5.6,而worpdress是4.7,所以如果它检测到它可能的话,它已经使用了utf8mb4_unicode_520_ci编码。
我的问题是在我的托管(mysql 5.5)上,utf8mb4_unicode_520_ci未被识别为有效编码。所以我试图将utf8mb4_unicode_ci编码作为我的托管知道这个编码,如果我理解正确的话,这将 - 反对转到utf8 - 允许我保留4个字节。
我为db设置了几种不同的编码和排序组合,但没有成功(从这里How to convert an entire MySQL database characterset and collation to UTF-8?)。
我在wp-config中尝试了几种编码和排序组合,但没有。
来自数据库的所有内容(如帖子标题和帖子内容都会显示所有诊所的错误编码字符,其他任何内容都会正确显示)
我认为我需要转换数据库的实际内容,更改字符集和整理似乎不够。
我找到了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'
在我的托管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数据库,然后将其导入我的主机和...
导入成功。
我在db中搜索并替换siteurl。 然后我访问了在线网站,我得到了一些带有#34;问号char"
的诊断信息。来自数据库的任何文本都有解码问题 AT SOME POINT
源/ html标记还包含"问号char"
我不知道在哪里看或下一步做什么
答案 0 :(得分:0)
澄清:CHARACTER SETs
utf8
和utf8mb4
指定如何将字符编码为字节。 COLLATIONs
*_unicode_*
等,指定这些字符的比较方式。
utf8mb4_unicode_ci
和utf8mb4_unicode_520_ci
的编码相同,因为它们在字符集utf8mb4 中编码。
“utf8_general_ci的数据库和utf8mb4_unicode_520_ci的表” - 这可能意味着该数据库中的 new 表,除非另有说明,否则为CHARACTER SET utf8 COLLATION utf8_general_ci
。也就是说,数据库设置只是CREATE TABLE
的默认设置。由于您的表已经是CHARACTER SET utf8mb4 COLLATION utf8mb4_unicode_520_ci
,因此数据库默认值与它们无关。
只要CHARACTER SET
停留utf8mb4
,就不会丢失表情符号,中文等等。
不要使用mysql40
;它不知道任何 CHARACTER SETs
。请勿使用CONVERT
或CAST
。等
我认为520
来自mysqldump
的输出?你有一个可以处理大文件的编辑器吗?如果是这样,只需对其进行修改即可将utf8mb4_unicode_520_ci
更改为utf8mb4_unicode_ci
。然后加载转储。问题解决了吗?
您的修复
您在本地计算机上执行了ALTER ... CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
。这可能是一个更好的方法 - 因为它会使你的开发和生产机器相互一致。这应该有效。不要担心“数据库”声称的内容。
答案 1 :(得分:0)
我发现&utff8mb4_unicode_520_ci'并替换为' utf8mb4_unicode_ci'在.sql文件中。 最简单的解决这个原因。