草庐IT

PHP PDO 和整理

coder 2023-10-24 原文

我无法在 mysql 数据库中选择某些条目,将法语字符串与重音字符进行比较。

为了提高可读性,下面的数据样本被过度简化了。我尽量做到准确,所以有点长(抱歉)。

上下文

在数据库中,我有一些字符串,如“année”、“annee”、“début”、“debut”等。表和列是字符集 utf8 和 collat​​e utf8_general_ci。

我正在使用 MySQL 5.5.30 和 PHP 5.4.13,PDO 使用字符集 utf8 进行初始化:

$this->dbh = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->base . ';charset=utf8', $this->user, $this->pass);

在mysql控制台客户端

如果我 SELECT 没有任何整理精度,比如

AND data = :data

使用 :data = "année"。我会得到带有“année”和“annee”的台词。

然后我使用 utf8_bin 整理精度进行选择,例如

AND data = :data COLLATE utf8_bin

使用 :data = "année",我只检索带有 "année"的行。酷。

使用 PHP PDO

如果我在 PHP 脚本中使用相同的 SQL 并精确整理,我会收到此错误消息:

 COLLATION 'utf8_bin' is not valid for CHARACTER SET 'binary'

如果我使用 binary 排序规则,比如

AND data = :data COLLATE `binary`

我收到错误信息

 COLLATION 'binary' is not valid for CHARACTER SET 'utf8'

那么,我的问题是

在 PHP 脚本中

  • “如何明确设置字符集?” (我相信我在 PDO 中做到了 字符串初始化,不过好像不对。 “SET NAMES ...”在这种情况下效果不佳)
  • “在与重音字符进行比较时,如何使用 PDO 检索正确的结果?”

精度

这里有更多详细信息(请在评论中提问)。

*摘自“show create table”

CREATE TABLE `Request` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`client_id` int(8) DEFAULT NULL,
....
`domain_version_corrective` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8

*两个示例 SELECT(来自控制台,不使用 PHP/PDO):

SELECT domain_id, domain_version_corrective FROM Request WHERE client_id = 3661 AND domain_version_corrective = 'vèrçion 2.0' ;

返回

+-----------+---------------------------+
| domain_id | domain_version_corrective |
+-----------+---------------------------+
| FOOBAR    | vercion 2.0               |
| FOOBAR    | vèrcion 2.0               |
| FOOBAR    | verçion 2.0               |
| FOOBAR    | vèrçion 2.0               |
| FOOBAR    | vèrcion 2.0               |
+-----------+---------------------------+

SELECT domain_id, domain_version_corrective FROM Request WHERE client_id = 3661 AND domain_version_corrective = 'vèrçion 2.0' COLLATE utf8_bin;

返回

+-----------+---------------------------+
| domain_id | domain_version_corrective |
+-----------+---------------------------+
| FOOBAR    | vèrçion 2.0               |
+-----------+---------------------------+

*字符集:

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

最佳答案

我有同样的问题,我通过用 convert() 包装参数成功了,就像这样:

data = convert(:data using utf8) collate utf8_bin

PDO 似乎总是用 PDO 的字符集 BINARY 标记字符串参数。如果能知道如何改变这一点,那就太好了。

此外,我不确定像这样将字符串转换为 UTF8 是否真的正确,我想从技术上讲这可能取决于 PHP 在内部表示字符串的方式。

关于PHP PDO 和整理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32395317/

有关PHP PDO 和整理的更多相关文章

  1. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  2. 2023年B组蓝桥杯省赛考前好题整理 - 2

    蓝桥杯第十四届蓝桥杯模拟赛第三期考场应对攻略(C/C++)真题可以去此处寻找https://blog.csdn.net/weixin_46239370/article/details/105464885?spm=1001.2014.3001.5506考前准备考前五分钟,开十个源文件,并把头文件等必须写的部分写出来,写完的程序一定要有顺序地保留万能头可以尝试开一下#include试题1:问题描述请找到一个大于2022的最小数,这个数转换成十六进制之后,所有的数位(不含前导0)都为字母(A到F)。请将这个数的十进制形式作为答案提交。答案提交这是一道结果填空的题,你只需要算出结果后提交即可。本题的结

  3. Ruby:打印和整理数组的方法 - 2

    我不确定这个问题是不是太傻了,但我还没有找到解决办法。通常我会把一个数组放在一个循环中current_humans=[.....]current_humans.eachdo|characteristic|putscharacteristicend但是如果我有这个:classHumanattr_accessor:name,:country,:sex@@current_humans=[]defself.current_humans@@current_humansenddefself.print#@@current_humans.eachdo|characteristic|#putschar

  4. 零基础如何入门网络工程师?12年资深大佬,吐血整理最强学习指南 - 2

    最近收到好多学员的一些提问,零基础没经验,能不能转行到网络工程师?发展前景怎么样?薪资能有多少?应该有不少朋友都有这个疑问,那么,今天我尽量给大家做出一个详细的解答,希望能有所帮助。​内容可能比较长,大家可以点赞收藏,再慢慢阅读。零基础没经验,能不能转行到网络工程师?​想要快速学习并入门网工行业,最快速也是效率做高的方法就是考取行业的相关证书。就像其他行业一样,也有属于网工的认证。网络工程师这个行业,现在最具有含金量并被行业承认的两个认证:思科和华为。简单说一下两者的区别:​ 从含金量角度来看。两者的含金量其实差不多,HCIE是华为认证的最高等级证书,CCIE是思科认证的最高等级证书,两者在网

  5. eBPF verifier常见错误整理 @龙蜥社区eBPF SIG - 2

    如今eBPF程序的编写,很多都是基于bcc或者bpftrace进行,也有开发者直接基于libbpf库进行,但是不管怎样,编写的xx.bpf.c程序,在加载到内核时,都必须经过内核的verifier校验器进行各种边界和内存检查,经常会碰到各种奇奇怪怪的verifier报错,导致eBPF程序加载失败。有些错误,开发者可能要花费大量的时间去分析并修改程序,并祈祷程序能够加载成功。特别是在低版本的内核运行低版本Clang编译器编译的eBPF程序,错误提示非常糟糕,经常找不到出错点,这就大大增加了开发难度。为此,本文梳理了一些常见的eBPFverifier报错,避免更多的人走弯路,写出能成功加载的eBP

  6. Flink SQL管理平台flink-streaming-platform-web安装搭建-整理 - 2

    目录步骤安装第二步下载flink第三步安装flink-streaming-patform-web第四步配置flinkweb平台第五步运行demo在Flink学习的入门阶段,非常重要的一个过程就是Flink环境搭建,这是认识FLInk框架的第一步,也是为后续的理论学习和代码练习打下基础。今天加米谷大数据就为大家带来Flink环境搭建的步骤解析,帮助大家一步步来部署好Flink环境。步骤1、使用gitclone到本地后,使用IDEA打开项目2、修改数据库连接flink-streaming-web/src/main/resources/application.properties3、在本地数据库中创

  7. 微信小程序开发整理-mp3 - 2

    一、生命周期1、定义生命周期(LifeCycle)是指一个对象从创建>运行→>销毁的整个阶段,强调的是一个时间段。2、分类应用生命周期(app.js):特指小程序从启动->运行→销毁的过程App({//小程序初始化完成时,执行此函数,全局只触发一次。可以做一些初始化的工作。onLaunch:function(options){},//小程序启动,或从后台进入前台显示时触发。onShow:function(options){},//小程序从前台进入后台时触发。onHide:function(){}})页面生命周期(页面.js):特指小程序中,每个页面的加载→渲染→销毁的过程Page({onLoa

  8. 本科论文常见答辩问题整理 - 2

    这里写目录标题专业性问题你系统的整体设计是怎么样?用了什么技术?这些技术应用的好处是什么?框架,SSM,SSH这些有什么优势。前端,前端用了什么;你数据库整体的设计是怎么样的,某个表,某个字段作用是什么?MySQL,为什么用MySQL;有几个表;三范式;主键这些基础。数据库链接方式,数据库设计中的ER图、范式等。你系统核心功能怎么实现?业务,功能模块,老师对某个模块需要详细了解,问你是怎么做的,其实就是你的代码实现逻辑;功能怎么实现的。流程图,讲一下有角色的功能区别。一些软件工程,数据库的基础知识,比如时序图,ER图,范式之类的。前后端交互用什么;ajax等等软件测试Java基础,三大特性,有

  9. 3.2 报错整理 - 2

     报错1:报错:RuntimeError:DataLoaderworker(pid93789)iskilledbysignal:Killed.原因:显存不够报错2:报错:TqdmWarning:IProgressnotfound.Pleaseupdatejupyterandipywidgets.解决:pipinstallipywidgets报错3:报错:RuntimeError:CUDAerror:CUBLAS_STATUS_EXECUTION_FAILEDwhencalling`cublasSgemm(handle,opa,opb,m,n,k,&alpha,a,lda,b,ldb,&beta

  10. json - 整理大型非结构化 REST/JSON 响应 - 2

    我正忙于弄清楚如何将大型非结构化json响应解码为可用对象。这是一个示例响应(经过修剪以显示我遇到问题的部分)由于这是一个非常大的json响应,因此大大对其进行了修剪。为简单起见,我在下面也省略了结构标记。{"responseStatus":"ok","responseHeader":{"status":"ok","requestId":"blah"},"responseData":{"records":[{"name":"blah","site":{"id":1,"name":"west"},"somevar1":"someval","somevar2":{"x":2,"y":1},

随机推荐