首页 文章

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

提问于
浏览
0

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

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

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

我想我需要转换数据库的实际内容,改变字符集和校对似乎不够 .

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

任何帮助,将不胜感激


UPDATE

这是我经历的精确程序:

初步情况:

我在本地安装了一个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将表charset更改为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

我的db排序规则仍然是 utf8

我mysqldump数据库,然后将其导入我的主机和...

导入成功 .

我搜索并替换db中的siteurl . 然后我访问了在线网站,我得到了一些带有“问号字符”的密码

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

源/ html标记也有那些“问号字符”

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

2 回答

  • 0

    说明: CHARACTER SETs utf8utf8mb4 指定字符如何编码为字节 . COLLATIONs *_unicode_* 等,指定这些字符的比较方式 .

    utf8mb4_unicode_ciutf8mb4_unicode_520_ci 的编码是相同的,因为它们在字符集utf8mb4中编码 .

    "database that is utf8_general_ci and tables that are utf8mb4_unicode_520_ci" - 这可能意味着除非特别声明,否则该数据库中的新表将为 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 . 然后加载转储 . 问题解决了?

    Your fix

    你在本地机器上做了 ALTER ... CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci . 这可能是一个更好的方法 - 因为它会使你的开发和 生产环境 机器相互一致 . 这应该有效 . 不要担心"database"声称的内容 .

  • 0

    我找到'utf8mb4_unicode_520_ci'并在.sql文件中替换为'utf8mb4_unicode_ci' . 最简单的解决这个问题的原因 .

相关问题