数据转换与数据库应用指南
立即解锁
发布时间: 2025-08-29 10:53:33 阅读量: 11 订阅数: 19 AIGC 

### 数据转换与数据库应用指南
#### 1. 数据库日期和时间存储方式
在数据库的一行中保存日期和时间有两种方式:
- **添加 datetime 列**:在表中添加 `datetime` 类型的列,并在与数据库服务器通信的代码中提供日期和时间。例如,创建一个包含 `datetime` 列的表:
```sql
CREATE TABLE `date_annotation_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`temperature` float NOT NULL,
`barometric` float DEFAULT NULL,
`date_saved` datetime DEFAULT NULL,
`notes` char(128) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
```
插入数据时,需要提供符合 MySQL 格式的日期和时间值:
```sql
INSERT INTO date_annotation_test VALUES (null, 91.34,15.04,'11/7/15 23:16:30', 'Test datetime.');
```
查询表数据示例:
```sql
mysql> SELECT * FROM date_annotation_test;
+----+-------------+------------+---------------------+----------------+
| id | temperature | barometric | date_saved | notes |
+----+-------------+------------+---------------------+----------------+
| 1 | 90.82 | 15 | 2011-07-15 23:15:10 | NULL |
| 2 | 91.34 | 15.04 | 2011-07-15 23:16:30 | Test datetime. |
+----+-------------+------------+---------------------+----------------+
2 rows in set (0.00 sec)
```
- **使用 timestamp 列**:这是一种特殊的数据类型,由数据库服务器自动更新。每个表只能使用一个 `timestamp` 列。可以使用 `ALTER` 语句添加该列:
```sql
ALTER TABLE date_annotation_test ADD COLUMN data_changed TIMESTAMP AFTER notes;
```
插入数据时,传递 `NULL` 值让数据库服务器使用默认值:
```sql
INSERT INTO date_annotation_test VALUES (null, 91.34,15.04, null, 'Test timestamp.',null);
```
查询表数据示例:
```sql
mysql> SELECT * FROM date_annotation_test;
+----+-------------+------------+---------------------+-----------------+---------------------+
| id | temperature | barometric | date_saved | notes | data_changed |
+----+-------------+------------+---------------------+-----------------+---------------------+
| 1 | 90.82 | 15 | 2011-07-15 23:15:10 | NULL | 2015-11-08 15:55:50 |
| 2 | 91.34 | 15.04 | 2011-07-15 23:16:30 | Test datetime. | 2015-11-08 15:55:50 |
| 3 | 91.34 | 15.04 | NULL | Test timestamp. | 2015-11-08 15:57:27 |
+----+-------------+------------+---------------------+-----------------+---------------------+
3 rows in set (0.00 sec)
```
使用 `timestamp` 列可以让数据库自动记录数据添加或更改的时间,但也有局限性:
- 每个表只能有一个 `timestamp` 列。
- 行发生任何更改时,`timestamp` 列的值会被覆盖。
#### 2. 数据类型转换
改变数据元素的类型需要仔细考虑和规划,因为如果转换不当,很容易丢失数据。需要考虑以下几个方面:
- **存储量和值范围**:例如,整数和无符号整数可能大小相同(2 字节),但值范围不同。整数的范围是 -32768 到 32767,而无符号整数的范围是 0 到 65535。
- **数据精度**:浮点数是带有小数的实数,大多数平台明确指出浮点数是近似值,不是精确值。因此,在进行数据类型转换时需要考虑这一点。例如,将浮点数转换为整数可能会有舍入问题。
- **算术运算**:运算结果或中间值必须在数据类型的值范围内。例如,两个无符号整数相加的结果赋值给另一个无符号整数时,必须确保结果在 0 到 65535 的范围内,否则可能会发生溢出。
以下是一个 Arduino 代码示例,展示了溢出的情况:
```cpp
void setup() {
unsigned int uint_val = 65535;
long long_val = 65535;
Serial.begin(9600);
while (!Serial); // Wait until Serial is ready - Leonardo
Serial.print("1> ");
Serial.print(uint_val);
Ser
```
0
0
复制全文
相关推荐









