You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中存储波斯数字?INT列输入波斯数字报错求助

解决MySQL INT列无法存储波斯数字的问题

首先得明确一个核心问题:INT是数值类型,它只接受标准阿拉伯数字(0-9)作为有效输入。你输入的波斯数字“۱、۲、۳”本质是Unicode字符(对应U+06F1至U+06F9),属于字符串范畴,直接插入INT列必然触发类型转换错误——这和数据库编码、排序规则完全无关,之前执行的SET NAMES UTF8、mysqli_set_charset这些操作都是用来解决字符存储乱码的,对这个类型不匹配的问题起不到作用。

下面给你两种可行的解决方案:

方案一:插入前将波斯数字转换为阿拉伯数字(推荐)

在PHP层做转换,把波斯数字替换成对应的阿拉伯数字,再插入INT列。这里给你写个简单的转换函数:

function persianToArabicNumbers($input) {
    // 映射波斯数字到阿拉伯数字
    $persianDigits = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
    $arabicDigits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    return str_replace($persianDigits, $arabicDigits, $input);
}

// 使用示例
$persianPrice = '۱۲۳۰۰۰'; // 用户输入的波斯数字价格
$validPrice = persianToArabicNumbers($persianPrice); // 转换为"123000"
// 之后执行插入操作,把$validPrice存入INT列

这种方式既能保留INT类型的所有优势(比如数值计算、排序、范围查询),又能兼容用户输入的波斯数字。

方案二:修改列类型为字符串类型(不推荐,仅特殊场景使用)

如果你的业务完全不需要对Price列做数值操作(比如计算总价、排序价格区间),可以把Price列的类型改成VARCHAR(20)或者TEXT,这样就能直接存储波斯数字字符串。但这种方式会失去数值类型的便利性,后续如果需要做数值相关操作会非常麻烦,所以只建议在极端场景下使用。

内容的提问来源于stack exchange,提问作者Navid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:33:16