字符串值不正确:\'\\xCD\\xCF\\xD7\\xA7\\xC9\\xFA...\\
我的服务器上的一切都应该是这样的utf8mb4
,utf8mb4_uca1400_ai_ci
所以让我们来看看一切。
我my.ini
在 Windows 10 上针对 MariaDB 11.4.2 的文件:
[mysql]
default-character-set = utf8mb4
[mysqld]
datadir=C:/WAMP/MariaDB/data
port=3306
innodb_buffer_pool_size=50M
character-set-server=utf8mb4
character-set-client-handshake = FALSE
collation-server = utf8mb4_uca1400_ai_ci
general-log
general-log-file=C:/WAMP/MariaDB/logs/queries.log
[client]
default-character-set = utf8mb4
port=3306
plugin-dir=C:\WAMP\MariaDB/lib/plugin
我用来验证字符集和排序规则的本地查询:
SELECT LOWER(VARIABLE_NAME) AS `variable_name`,
GLOBAL_VALUE AS `global_value`,
DEFAULT_VALUE AS `default_value`
FROM INFORMATION_SCHEMA.SYSTEM_VARIABLES
WHERE VARIABLE_NAME LIKE '%CHARACTER_SET_%'
OR VARIABLE_NAME LIKE '%COLLATION_%'
ORDER BY `VARIABLE_NAME` ASC;
每次进行服务器迁移时,我都会运行以下命令:
SET CHARACTER SET 'utf8';
SET collation_connection = 'utf8mb4_uca1400_ai_ci';
SET GLOBAL collation_connection = 'utf8mb4_uca1400_ai_ci';
SET GLOBAL collation_database = 'utf8mb4_uca1400_ai_ci';
SET GLOBAL collation_server = 'utf8mb4_uca1400_ai_ci';
和SHOW CREATE DATABASE
的回报。utf8mb4
utf8mb4_uca1400_ai_ci
与错误相关的列使用utf8mb4_uca1400_ai_ci
。
这是一封电子邮件,主题为“[标题]满足您对仙侠手游的所有幻想。” 🙄︀ 我猜翻译中有些地方弄错了。虽然我认为我已经涵盖了大多数内容,但我并没有将字符集和排序规则全部最大化。所以...
我还没有正确设置字符集和/或排序规则,以及如何确保所有可能的内容都设置为utf8mb4
和utf8mb4_uca1400_ai_ci
?
问题出在导入的字符串不符合 UTF-8 标准,评论可以证实这一点。唯一的目标是报告不符合标准的电子邮件信息(出于多种原因),并获取足够的可识别信息以确定哪封邮件导致了问题。
使用 PHP 以下将
$string
自动检测起始字符集并将其转换为 UTF-8:iconv(mb_detect_encoding($string, mb_detect_order(), true), "UTF-8", $string);
虽然它解决了我遇到的问题,但我认为它不会在所有情况下都有效。如果问题超出了当前有效的解决方案,我会发布不同的问答。