php - 使用 PHP 在 MySQL 中破坏 UTF8 字符
问题描述
我注意到在处理一些不正常拼写的名称时,即标准字母英国/美国从我插入记录到数据库中实际显示的内容中丢失了。我已经安静地阅读了一些关于排序规则类型的内容,我认为这是导致问题的原因,但不确定是这种情况还是我仍然做错了,因为我的问题仍然存在。
下面是我正在创建的记录以及我的数据库结构的示例,并且您还可以看到 last_name 字段具有“ö”,当我查找记录时,我实际上看到了 last_name “Körner”
CREATE TABLE `data` (
`id` bigint(20) NOT NULL,
`profile_id` int(11) NOT NULL,
`first_name` varchar(100) NOT NULL,
`last_name` varchar(100) NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ALTER TABLE `data`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `profile_id` (`profile_id`);
ALTER TABLE `data`
MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT;
INSERT IGNORE INTO data (profile_id, first_name, last_name) VALUES (1, 'Brent', 'Körner');
last_name 上的字段排序规则设置为“utf8_general_ci”,我理解或应该说认为可以解决这个问题。
这似乎是我在使用 PHP 时做错/丢失的事情,因为当我在 PhpMyAdmin 中执行 INSERT 查询时,它保存得很好。
解决方案
看来问题最终归结为PHP,而我没有设置字符集。
对于 mysql
mysql_set_charset('utf8');
对于 mysqli
mysqli_set_charset('utf8');
推荐阅读
- python - 视频和实时的视频捕获问题
- xmlhttprequest - livewire 视图不向组件发送任何 xhr 请求
- javascript - Angular AuthorizeGuard 角色
- javascript - 如何在同一个网页中使用相同的 JavaScript 小部件 2 次?
- django - Postgres-alpine 无法连接到 Django 项目容器
- javascript - 如何将今天的时间添加到任何日期对象和 getISOString?
- django - django rest 框架中的 csrftoken - 通过 HTTPIE 发送
- python - pymysql.err.IntegrityError: (1048, "列 'dob' 不能为空")
- java - 如何在 Spring 5.3 及更高版本中使用 Stomp 和 SockJS 处理 CORS 起源?
- c++ - 返回对临时对象的引用