我开始在我的开发机器上使用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 和帖子内容都显示所有诊断的编码严重的字符,其他任何内容都会正确显示)
我想我需要转换数据库的实际内容,改变字符集和校对似乎不够 .
我找到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 回答
说明:
CHARACTER SETs
utf8
和utf8mb4
指定字符如何编码为字节 .COLLATIONs
*_unicode_*
等,指定这些字符的比较方式 .utf8mb4_unicode_ci
和utf8mb4_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
. 不要使用CONVERT
或CAST
. 等等 .我假设
520
来自mysqldump
的输出?你有一个可以处理大文件的编辑器吗?如果是这样,只需编辑它以将utf8mb4_unicode_520_ci
更改为utf8mb4_unicode_ci
. 然后加载转储 . 问题解决了?Your fix
你在本地机器上做了
ALTER ... CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
. 这可能是一个更好的方法 - 因为它会使你的开发和 生产环境 机器相互一致 . 这应该有效 . 不要担心"database"声称的内容 .我找到'utf8mb4_unicode_520_ci'并在.sql文件中替换为'utf8mb4_unicode_ci' . 最简单的解决这个问题的原因 .