保留MySQL中的前导零列

16 浏览
0 Comments

保留MySQL中的前导零列

我有一个名为pr_collaborator的表格:

--------------------------------
  id  |   name  |   last_name  |
--------------------------------
000015|  John   |    Smith     |
002154|  Maria  |    Sanchez   |
123456|  Fabian |    Sierra    |
SE0012|  Sarah  |    Taylor    |
SE0015|  Conny  |    Huertas   |
--------------------------------

我刚刚执行了以下查询:

SELECT * FROM pr_collaborator;

查询结果如下:

--------------------------------
  id  |   name  |   last_name  |
--------------------------------
  15  |   John  |    Smith     |
  2154|  Maria  |    Sanchez   |
123456|  Fabian |    Sierra    |
SE0012|  Sarah  |    Taylor    |
SE0015|  Conny  |    Huertas   |
--------------------------------

我想保留前导零,id字段是VARCHAR(10)类型的。

我尝试了以下方法但没有成功:

SELECT CAST(id as CHAR) AS id, name, last_name FROM pr_collaborator;
SELECT CONVERT(id, VARCHAR) AS id, name, last_name FROM pr_collaborator;

我不想使用LPAD函数,因为我不知道值的长度。

更新

这是pr_collaborator的结构:

CREATE TABLE `pr_collaborator` (
  `id` varchar(10) COLLATE utf8_spanish_ci NOT NULL,
  `name` varchar(80) CHARACTER SET latin1 NOT NULL,
  `last_name` varchar(80) CHARACTER SET latin1 NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci

这是PHP代码中的查询:

$sql = "SELECT id, name, last_name FROM pr_collaborator";
$result = $this->db->fetchAll($sql, Phalcon\DB::FETCH_ASSOC);
$this->jsonReturnSuccess($result);

可能是PHP的问题,而不是我的MySQL。

希望你能帮助我!

0
0 Comments

问题的原因是PHP将值视为整数,导致在MySQL中丢失了前导零。解决方法是使用QUOTE()函数将列值放入引号中。

在上述代码中,通过使用QUOTE()函数将id列的值放入引号中,保留了查询结果中的前导零。以下是修改后的代码示例:

$sql = "SELECT QUOTE(id) AS id, name, last_name FROM pr_collaborator";
$result = $this->db->fetchAll($sql, Phalcon\DB::FETCH_ASSOC);
$this->jsonReturnSuccess($result);

通过在查询中使用QUOTE()函数,我们将id列的值放入了引号中,从而保留了前导零。

以下是修改后的查询结果示例:

array(
     'id' : '000015',
     'name': 'Jhon',
     'last_name': 'Smith'
),
array(
     'id' : '002154',
     'name': 'Maria',
     'last_name': 'Sanchez'
),
array(
     'id' : '123456',
     'name': 'Fabian',
     'last_name': 'Sierra'
),
array(
     'id' : 'SE0012',
     'name': 'Sarah',
     'last_name': 'Taylor'
),
array(
     'id' : 'SE0015',
     'name': 'Conny',
     'last_name': 'Huertas'
)

通过将id列的值放入引号中,我们成功地保留了查询结果中的前导零。这样,我们就解决了在MySQL中丢失前导零的问题。

0
0 Comments

在MySQL中保留前导零的问题是指在插入数据后,查询时前导零被删除的现象。出现这个问题的原因是MySQL默认将数据存储为整数类型,会自动删除前导零。解决这个问题的方法是将数据存储为字符串类型。

在上述示例中,我们可以看到在插入数据时,第三列的值为'00010102',但在查询时,结果却变成了'10102',前导零被删除了。这是因为MySQL将该列存储为整数类型,默认会删除前导零。为了解决这个问题,我们需要将该列的数据类型更改为字符串类型。

以下是解决方法的示例代码:

ALTER TABLE my_table MODIFY COLUMN status VARCHAR(10);

通过以上代码,我们将第三列的数据类型从整数类型修改为字符串类型,长度设置为10。这样,无论是插入数据还是查询数据,前导零都能得到保留。

下面是修改后的代码示例:

INSERT INTO my_table VALUES (8,NOW(),'00010102');

Query OK, 1 row affected (0.03 sec)

SELECT status FROM my_table WHERE uuid = 8;

+----------+

| status |

+----------+

| 00010102 |

+----------+

通过对第三列的数据类型进行修改,我们成功解决了在MySQL中保留前导零的问题。现在,插入的数据和查询的结果都能正确地保留前导零。

0