首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL:相同的值不是相同的

MySQL:相同的值不是相同的
EN

Stack Overflow用户
提问于 2017-03-15 20:14:44
回答 1查看 74关注 0票数 0

我在这里读到了一个类似的问题,但我不知道如何使它与MySQL相关。

我有一个数字文件,我要插入到一个表,以保存记录。我正在读取文件,连接到我的数据库,并使用PHP查询数据库。那个部门一切都很好,这是我的代码:

代码语言:javascript
运行
复制
$dbh = new PDO("mysql:host=$hostname; dbname=$database", $username, $password);

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
print "Connected to Database\n\n\n";

$file = "missing.txt";
$fileArray = preg_split("/[\t\r]/", file_get_contents($file));

for ($i = 0; $i < count($fileArray); $i++) {
    if ($i == 0 || $i % 7 == 0) {
        $sql = $dbh->prepare("INSERT INTO temp_missing SET SKU = ?;");

        $sql->bindParam(1, $fileArray[$i]);

        $sql->execute();
        echo $fileArray[$i] . "</br>";
    }
}

现在,从所有的外观来看,发送给MySQL的数据都很好。第1行包含一个值03999。我知道另一个表中存在这个值,所以我将输入select命令,根据这个新表中存在的这些数字从一个表中获取特定的信息。

代码语言:javascript
运行
复制
SELECT num, name, description FROM table1 WHERE num IN (SELECT SKU FROM temp_missing);

这什么也回不来。什么都没有。如果我键入以下内容:

代码语言:javascript
运行
复制
SELECT * FROM temp_missing WHERE SKU = 03999;
SELECT * FROM table1 WHERE num = 03999;
SELECT * FROM table1 WHERE num = '03999';

他们都还东西。他们都返回一行,其中num或SKU为03999。但以下内容不返回任何内容:

代码语言:javascript
运行
复制
SELECT * FROM temp_missing WHERE SKU = '03999';

这没有任何回报,而且我似乎无法在互联网上找到任何东西(或者至少我不能正确表达我的问题)来找出它们为什么不一样,以及如何使它们保持不变。

以下是如何设置这两个字段:

table1

num -> VARCHAR ->长度/集: 20 ->无符号,不允许空,无零,默认左空白,左空后的所有内容

temp_missing

SKU -> VARCHAR ->长度/集: 50 ->无无符号,不允许无符号,无零零,无默认值,保留空白后的所有内容

我刚才注意到的这两个表之间有一个很大的区别(我没有创建这两个表,我是在以前的程序员之后发现的)。

num是一个关键。SKU什么都不是。

这有什么区别吗??

请告诉我这是否有意义,如果需要更多的信息,如果这个问题我只是找不到--相信我,几个月来我一直在用不同的方法来研究这个问题,我只是这次找不到一个--我真的很抱歉。

谢谢。

作为一个增编,我正在读取的文件是作为一个文本选项卡创建的,该选项卡是从一个被格式化为具有完全文本格式化行和列的excel文件中分隔的。以防万一会有什么不同。

EN

Stack Overflow用户

回答已采纳

发布于 2017-03-15 23:23:58

造成这种不匹配的原因是您的正则表达式测试了\r,而不是\n。由于您的文件可能有用于表示换行的\r\n序列,因此您将得到以\n开头的字符串。如果您的行中还有与选项卡分隔符相邻的空格,那么这些空格也将出现在您的数据中。

为了解决这个问题,将正则表达式改为:

代码语言:javascript
运行
复制
/\s*[\t\n]\s*/

不需要显式地提到\r,因为它将被\s覆盖。明确提到\t\n仍然是必需的,否则您也会被单个字段中的空格分隔。

或者,您也可以在拆分后删除值周围的空白,使用此映射:

代码语言:javascript
运行
复制
$fileArray = array_map('trim', $fileArray);
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42819819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档