mysql中Like子句阿拉伯字符串的日期类型问题

古达·埃拉菲(Gouda Elalfy)

我在旧系统上工作,并且弹出窗口中的搜索是动态进行的。例如,如果弹出字段:field1, field2, field3并且用户在文本框中输入كلمة进行搜索或输入任何阿拉伯语单词。系统将创建一个动态搜索条件,如下所示:

field1 LIKE '%كلمة%' OR field2 LIKE '%كلمة%' OR field3 LIKE '%كلمة%'

当这些字段之一是日期类型时,会发生问题,在这种情况下,请给我mysql错误:

非法混合排序规则以进行“赞”操作

当我将搜索到的单词更改为英语单词时,它会给我警告,但可以正常工作,因为在这种情况下,我不需要日期类型字段(我搜索文本)。我也不能更改此动态搜索php函数的核心,因为所有系统均已构建,因此无法使用像这样的代码:

OR DATE_FORMAT(field1, '%Y-%m-%d') LIKE '%كلمة%'

因为我不知道哪个字段是Date类型,所以它是动态搜索。

此问题也仅在托管服务器上发生,而不在我的本地主机上发生,我的主机为:Server version: 5.5.47-cll - MySQL Community Server (GPL)而我的本地主机mysql版本为:5.5.5

这是显示创建表脚本:

CREATE TABLE `POS_QUOTATIONS` (
  `DEPT_ID` varchar(20) NOT NULL,
  `BILL_TYPE` int(11) NOT NULL,
  `BILL_NUMBER` int(11) NOT NULL,
  `BILL_NUMBER_TO_RTRN` int(11) NOT NULL,
  `SALESPERSON_NAME` varchar(255) NOT NULL,
  `BILL_DATE` date NOT NULL,
  `POS_ID` int(11) NOT NULL,
  `STOCK_ID` varchar(20) NOT NULL,
  `CURRENCY_ID` varchar(3) NOT NULL,
  `EXCHANGE_RATE` float NOT NULL,
  `SALESPERSON_TYPE` int(1) NOT NULL,
  `SALESPERSON_ID` int(10) NOT NULL,
  `CLIENT_TYPE` int(1) NOT NULL,
  `ACC_CODE` varchar(20) NOT NULL,
  `CLIENT_NAME` varchar(255) NOT NULL,
  `CLIENT_APPROVAL_NUMBER` varchar(20) NOT NULL,
  `NOTES` varchar(255) NOT NULL,
  `BILL_VALUE_BEFORE_DISCOUNT` double NOT NULL,
  `OVRALL_COST` double DEFAULT '0',
  `SALES_TAX` double NOT NULL,
  `ADITIONAL_AMOUNT` double NOT NULL,
  `DISCOUNT_PERCENTAGE` double NOT NULL,
  `DISCOUNT_AMOUNT` double NOT NULL,
  `BILL_VALUE_AFTER_DISCOUNT` double NOT NULL,
  `CLIENT_PAYMENT` decimal(13,2) NOT NULL,
  `REMAINING_AMOUNT` decimal(13,2) NOT NULL,
  `PAYMENT_METHOD` int(11) NOT NULL,
  `CREDIT_CARD_DETAILS` varchar(255) NOT NULL,
  `BANK_OPERATION_NUMBER` varchar(50) NOT NULL,
  `BANK_DETAILS` varchar(255) NOT NULL,
  `BANK_ACC_CODE` varchar(20) NOT NULL,
  `PAYMENT_METHOD_INFO` varchar(500) NOT NULL,
  `CONTRACT_PRODUCT_DETAILS` text NOT NULL,
  `CONTRACT_REC_VOUCHER_NO` varchar(255) NOT NULL,
  `CONTRACT_REPAYMENT_DATE` varchar(255) NOT NULL,
  `ROWID` varchar(255) NOT NULL,
  `YEAR` int(4) NOT NULL,
  `CREATION_USER` varchar(10) DEFAULT NULL,
  `CREATION_TIMESTAMP` varchar(14) DEFAULT NULL,
  `CREATION_COMPUTER_NAME` varchar(50) DEFAULT NULL,
  `LASTUPDATE_USER` varchar(10) DEFAULT NULL,
  `LASTUPDATE_TIMESTAMP` varchar(50) DEFAULT NULL,
  `LASTUPDATE_COMPUTER_NAME` varchar(50) DEFAULT NULL,
  `TRANS_FLAG` varchar(10) DEFAULT NULL,
  `RECORD_STATUS` varchar(1) DEFAULT NULL,
  `JOURNAL_STATUS` tinyint(1) DEFAULT NULL,
  `PROCESS_NUMBER` varchar(50) DEFAULT NULL,
  `OFFER_TERMS` text,
  `TECHNICAL_SPECIFICATIONS` text,
  `OFFER_STATUS` tinyint(1) DEFAULT NULL,
  `PROJECT_DESCRIPTION` varchar(500) DEFAULT NULL,
  `POS_CONTRACT_AGREEMENT_ID` varchar(50) DEFAULT NULL,
  `COST_CENTER_CODE` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`ROWID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

以及托管服务器上数据库的任何字符集,当字符集为utf8_general_ci或latin1_swedish_ci事先感谢时,都会产生此错误

亚历克斯·布莱克斯

like在日期字段上使用时,它们被视为拉丁字符串。假设您使用的是utf8字符集,则需要convertlike之前添加日期列

convert(field1 using utf8) LIKE '%كلمة%' OR convert(field2 using utf8) LIKE '%كلمة%' OR convert(field3 using utf8) LIKE '%كلمة%'

理想情况下,如果您在此处添加一些逻辑并有条件date地仅将转换应用于字段。例如,如果您知道field2是唯一的date字段,则可以构建查询:

field1 LIKE '%كلمة%' OR convert(field2 using utf8) LIKE '%كلمة%' OR field3 LIKE '%كلمة%'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在javascript中打印阿拉伯字符串

在Java中打印阿拉伯字符串

在C ++中反转阿拉伯字符串

过滤阿拉伯字符串

阿拉伯语/波斯语字符串中的JavaScript字符串拆分问题

将阿拉伯字符串日期转换为英文日期

将带有阿拉伯字符的字符串转换为日期

php strstr未检测到阿拉伯字符串中的子字符串

包含阿拉伯文本时查询字符串问题

在开始中将整数插入阿拉伯字符串

SQL查询OR函数反转阿拉伯字符串

如何用C#检测字符串中的阿拉伯或波斯字符?

如何从python中的阿拉伯字符串中删除英文文本?

如何在Django中获取阿拉伯字符串的Unicode表示形式?

将字符串中的英语数字转换为阿拉伯数字

JS中的罗马和阿拉伯数字字符串数组排序

如何将阿拉伯Umm Al-Qura日期字符串解析为.NET DateTime对象?

iOS推送通知的PHP和Java字符串长度阿拉伯文字大小问题

检查字符串中是否包含除波斯/阿拉伯字符以外的其他字符

如何将带有阿拉伯字符的字符串日期转换为英文字符串日期?最好使用 DateTime

Unicode中的阿拉伯字符处理

如何分隔字符串(阿拉伯字符串)

如何使用非阿拉伯字符在 RTL 中鍵入佔位符字符串

将阿拉伯语存储在字符串中,然后使用Java将其插入数据库中

如何使用正则表达式从字符串中仅检索阿拉伯文本?

如何使用JavaScript将字符串中的波斯和阿拉伯数字转换为英语?

如何在SQL中首先连接阿拉伯字符串,然后再连接英语?

如何删除或过滤列表中的非英语(中文,韩语,日语,阿拉伯语)字符串?

如何从文本文件中删除俄语和阿拉伯语字符串