部署mysql db时的问题(utf8mb4_unicode_520_ci - > utf8mb4_unicode_ci)

时间:2017-01-25 11:43:08

标签: mysql wordpress encoding utf8mb4

我开始在我的开发机器上使用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中尝试了几种编码和排序组合,但没有。

来自数据库的所有内容(如帖子标题和帖子内容都会显示所有诊所的错误编码字符,其他任何内容都会正确显示)

menu label from the database display incorrectly, where the hardcoded/translated label display correctly

我认为我需要转换数据库的实际内容,更改字符集和整理似乎不够。

我找到了this,但它没有直接解决我的问题,或者如果是,我错过了它。

任何帮助将不胜感激

--------------------------------

更新

这是我经历的精确程序:

初始情况:

我在本地安装了一个wordpress(4.6.1)(在我的开发机器上,mysql 5.6.28)。   我在本地工作主题和插件

(此时我在本地拥有一个utf8_general_ci的数据库和utf8mb4_unicode_520_ci的表

问题:

我想在我的托管上部署我的wordpress(mysql:5.5 - db collat​​ion似乎是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数据库,然后将其导入我的主机和...

导入成功。

我在db中搜索并替换siteurl。 然后我访问了在线网站,我得到了一些带有#34;问号char"

的诊断信息。

来自数据库的任何文本都有解码问题 AT SOME POINT

源/ html标记还包含"问号char"

我不知道在哪里看或下一步做什么

2 个答案:

答案 0 :(得分:0)

澄清:CHARACTER SETs utf8utf8mb4指定如何将字符编码为字节。 COLLATIONs *_unicode_*等,指定这些字符的比较方式。

utf8mb4_unicode_ciutf8mb4_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。请勿使用CONVERTCAST。等

我认为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文件中。 最简单的解决这个原因。