php - 即使使用 utf8mb4_unicode_ci,MySQL 也会出现“不正确的字符串值”错误
问题描述
我的数据库存储了 Garry's Mod 服务器(源专用服务器)的服务器主机名,有时它们似乎包含utf8mb4_unicode_ci
无法存储的字符。这些字符是什么,我该如何解决这个问题?
insert into `servers` (`steamid64`, `script_id`, `ip_address`, `port`, `uses`, `hostname`, `maxplayers`, `map`, `last_active`) values (XXXXXXXXXXXXXXX, 1599, XXXXXXXXXXX, 27095, 1, [FR] USA vs F?d?ration | Apocalypse | SeriousRP | TSF, 20, rp_evocity_dc, CURRENT_TIMESTAMP())
Incorrect string value: '\xE9d\xE9rat...'
Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xE9d\xE9rat...' for column 'hostname' at row 1 (SQL: insert into `servers` (`steamid64`, `script_id`, `ip_address`, `port`, `uses`, `hostname`, `maxplayers`, `map`, `last_active`) values (XXXXXXXXXXXXXXX, 1599, XXXXXXXXXXXXXXXX, 27095, 1, [FR] USA vs F?d?ration | Apocalypse | SeriousRP | TSF, 20, rp_evocity_dc, CURRENT_TIMESTAMP()))
File "app/Http/Controllers/PayloadController.php", line 243, in GetPayload
$Server -> save();
File "public/index.php", line 55
$request = Illuminate\Http\Request::capture()
解决方案
你希望...édérat...
吗?
您的客户使用的是 latin1,而不是 utf8mb4。
也许最简单的解决方法是告诉 mysql 您在客户端使用 latin1 。这最好在连接字符串中完成。(您使用的是 PDO 还是 mysqli?)
注意:客户端的编码和数据库表中的编码是独立的。转码是自动的。但是在客户端中声明编码必须是正确的。
推荐阅读
- javascript - 无序列表 unicode 字符 0x25E6 填充问题
- python-3.x - TypeError: AnonimousSurvey() 接受 0 个位置参数,但给出了 1 个
- python - PIP --upgrade 不适用于 Python 3.8.2
- c++ - qt删除窗口顶部框架边框
- c - 如何为 openssl 解密命令提供字符串 IV 和密钥?
- reactjs - 反应错误说对象作为反应子无效
- android - 使用列值从房间检索数据 - 房间
- ios - UITableViewCell 的 ViewModel:“允许”数据库操作?
- javascript - 如何生成带有变量的链接?使用 javascript、jquery
- java - Camel 将参数转移到错误的级别