首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入字符串时缺少前导零

插入字符串时缺少前导零
EN

Stack Overflow用户
提问于 2015-11-16 21:29:50
回答 4查看 1.5K关注 0票数 0

实际上,我对PHP和SQLite3以及我的一些字符串在那里的行为方式感到非常恼火。

我试图节省开放时间,但在字符串中,而不是数字,以防止前导零的问题(现在仍然有它哈哈…-.-)。

小时和分钟有自己的列,但当我插入'0x‘时,零就消失了,无论x是什么,都留在数据库中。:/

我肯定我只是错过了一些该死的小部分...

我已经检查了INSERT-statement,但什么也没找到。

插入字符串的示例:

INSERT INTO opening INSERT INTO opening (start_day, end_day, start_hour, start_minute, end_hour, end_minute) VALUES('Montag', 'Freitag', '00', '00', '01', '00')

但是输出结果是:

代码语言:javascript
复制
11|Montag|Freitag|0|0|1|0

代码的一部分:

代码语言:javascript
复制
class Database_Opening_Hours extends SQLite3{
    function __construct() {
        if(!file_exists("../../data/opening_hours/opening_hours.sqlite")){
            $this->open("../../data/opening_hours/opening_hours.sqlite");
            $this->exec('CREATE TABLE opening (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, start_day STRING, end_day STRING, start_hour STRING, start_minute STRING, end_hour STRING, end_minute STRING)');
        }
        else{
            $this->open("../../data/opening_hours/opening_hours.sqlite");
        }
    }
}
$db = new Database_Opening_Hours();
$insert = "INSERT INTO opening (start_day, end_day, start_hour, start_minute, end_hour, end_minute) VALUES('".htmlspecialchars($_GET["start_day"])."','".htmlspecialchars($_GET["end_day"])."','".$start_hour."','".$start_minute."','".$end_hour."','".$end_minute."')";
if($db->exec($insert)){
    $db->close();
    unset($db);
    echo "Insert erfolgreich";
}else{
    $db->close();
    unset($db);
    echo "Nicht wirklich...";
}
EN

回答 4

Stack Overflow用户

发布于 2015-11-16 21:32:52

非常确定您的列的类型设置为整数(或任何其他数字类型),而不是文本。

确保仔细检查列数据类型,并实际转储表,以便我们检查它是否真的设置为TEXT。

票数 2
EN

Stack Overflow用户

发布于 2015-11-18 22:45:40

这是由使用动态类型的SQLite引起的。从FAQ

这是一个功能,而不是一个错误。SQLite使用dynamic typing。它不强制数据类型约束。任何类型的数据(通常)可以插入到任何列中。您可以将任意长度的字符串放入整数列,将浮点数放入布尔列,或将日期放入字符列。在CREATE TABLE命令中分配给列的数据类型不限制可以放入该列的数据。每一列都可以包含任意长度的字符串。

从链接页面(强调我的):

为了最大限度地提高SQLite和其他数据库引擎之间的兼容性,SQLite支持列上的“类型关联”概念。列的类型关联是存储在该列中的数据的推荐类型。这里的重要思想是该类型是推荐的,而不是必需的。任何列仍然可以存储任何类型的数据。只是有些列,如果可以选择,会更喜欢使用一个存储类而不是另一个。列的首选存储类称为它的“亲和性”。

所以SQLite会将你的值动态地转换为整数。

我建议将start_hourstart_minute组合到start_time中( end_字段也是如此),并以00:00格式存储值。

SQLite将按原样存储,但它足够智能,可以识别时间值并允许您执行日期/时间操作:

代码语言:javascript
复制
select time(start_time, '+1 hour') from opening
票数 2
EN

Stack Overflow用户

发布于 2017-04-25 14:22:23

我在使用C/C++时遇到了这个问题,因为我没有引用字符串:

代码语言:javascript
复制
insert into test values('aa', 'bb');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33736609

复制
相关文章

相似问题

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