php应用mysql扩展的话,不能获取数据库中的数据类型,而当用mysqlnd的时候,是可以获取的。

在php7以后,mysql扩展已经摒弃了,建议用mysqli,而mysqli是可以获取数据库中的数据类型的,但是默认并没有开启。需要设置option参数  MYSQLI_OPT_INT_AND_FLOAT_NATIVE

为 true

$this->conn = mysqli_connect ( $this->host, $this->root, $this->password , $this->database);mysqli_options($this->conn,MYSQLI_OPT_INT_AND_FLOAT_NATIVE,true);

php手册相关参数地址:http://php.net/manual/zh/mysqli.options.php

以下为参考资料↓↓↓↓

源地址 http://www.druidcoder.cn/2016/05/10/mysql-driver/

php与mysql交互

参考资料:

http://stackoverflow.com/questions/1197005/how-to-get-numeric-types-from-mysql-using-pdo#answer-1197041

http://zhangxugg-163-com.iteye.com/blog/1894990

http://dengxi.blog..com/4804263/1748965

http://blog.ulf-wendel.de/2008/pdo_mysqlnd-the-new-features-of-pdo_mysql/

以前一直没注意到php从mysql取出来的数据都是string类型,无论是主键int id还是float。因为php是弱类型的语言,所以其实这也没多大关系。但是这引申出php所使用的mysql驱动等问题。

首先,php是如何与mysql交互的。PHP通过某种api(其实就是扩展),基于某种驱动或lib库与mysql server连接通信。

api有三种:mysql,mysqli和pdo。

其中mysql扩展已经不被建议使用,它将在5.5被废弃,而在php7中被去除。

驱动有两种:libmysqlclient(MySQL client server library )和mysqlnd(MySQL native driver )。

在5.3之前,默认使用的都是libmysql.从5.3开始mysqlnd已经内置于php源代码中,并且官方强烈建议使用这个驱动,只要在编译的时候加上就行了,比如:./configure --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql=mysqlnd。

而从5.4开始,三种api的驱动默认都将为mysqlnd,所以编译的时候不需要指定驱动了,比如:./configure --with-mysqli --with-pdo-mysql --with-mysql。

可以用下面两张图表示:

5.3之前

5.3之后

更多对mysqlnd的介绍,参考官方手册http://php.net/manual/zh/book.mysqlnd.php

如果使用的是旧的libmysql,那没办法,得不到mysql数据的类型,都会被转换为string。而从5.3开始使用mysqlnd驱动,就可得到,但是使用mysql扩展还是会被转换成string。

通过mysqli的MYSQLI_OPT_INT_AND_FLOAT_NATIVE参数,例如:

1

2

3

4

5

6

7

$mysqli = new mysqli('127.0.0.1', 'root', '', 'test');

$query = "select * from test_int";

$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);

$result = $mysqli->query($query);

$info = $result->fetch_array();

var_dump($info);

而通过pdo,例如:

1

2

3

4

5

6

7

$pdo = new PDO('mysql:host=127.0.0.1;dbname=test', 'root', '');

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

foreach ($pdo->query('select * from test_int') as $row) {

var_dump($row);

}

ATTR_EMULATE_PREPARES默认为true,需要指定;而ATTR_STRINGIFY_FETCHES默认就为false。

需要注意的是:decimal类型的数据,即使有了以上的配置,依然还是输出为string类型。

php mysql int string_php从mysql取出int数据,变成了string相关推荐

  1. mysql为int类型的字段php取出来之后为何变为string类型?

    https://segmentfault.com/q/1010000002957162 php从mysql取出int数据,变成了string https://blog.csdn.net/as17501 ...

  2. mysql中int最大多少,MySQL中int最大值深入讲解

    MySQL中int最大值深入讲解 导语 前两天看到的问题,展开写一下. 字节 我们都知道计算机是以二进制为基础.存储的基本单位是 Bit,也称为比特.二进制位.1bit 可以表示 0 或者 1 两个数 ...

  3. mysql text mediumint_【Mysql】mysql中bigint、int、mediumint、smallint 和 tinyint的取值范围...

    1.bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字),无符号的范围是0到 1844674 ...

  4. mysql int char连接_MySQL中int、char以及varchar的性能比较

    软件安装:装机软件必备包 SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.在使用它时,只需要发出& ...

  5. mysql Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT

    使用mysql的时候,用到int类型的蛮多,需要注意一下: 1. 值的范围 Type Storage Minimum Value Maximum Value   (Bytes) (Signed/Uns ...

  6. mysql中tinyint、smallint、int、bigint的区别介绍

    tinyint 从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据.存储大小为 1 个字节. unsigned 是从 0 到 255 的整型数据. 所以建表的时候 只能是tinyi ...

  7. mysql int 最大显示宽度_mysql int 整数类型 解释显示宽度 和 存储宽度

    存储宽度 是实际存储记录宽度 存储宽度默认是写死的,就算修改宽度也改变不了,改变的是显示宽度 ============有符号和无符号int============= 创建一个 无符号的 int 整数类 ...

  8. int mysql_「MYSQL」MYSQL中的int(11)到底代表什么意思?

    一.前言 在工作中经常要与mysql打交道,但是对mysql的各个字段类型一直都是一知半解,因此写本文总结记录一番. 二.简介 对于int类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用 ...

  9. 一次事故,我对MySQL时间戳存char(10)还是int(10)有了全新的认识

    摘要:char类型字段想走索引的话,必须用引号括起来.如果是时间戳等类型的纯数字,建议还是存为int型吧. 本文分享自华为云社区<一次事故,我对MySql时间戳存char(10)还是int(10 ...

最新文章

  1. SpringBoot开发微信公众号
  2. Python 连接Sql Server数据库 MSSql
  3. 双网卡服务器SOCKET编程指定客户端通信网卡
  4. 为什么 Redis 要比 Memcached 更火?
  5. idea如何彻底删除一个项目
  6. vim 命令_Vim 操作命令手册
  7. 【Anaconda-Error】'numpy.ufunc' object has no attribute '__module__'
  8. php常见数据类型转换与判断
  9. 介绍一种 Python 更方便的爬虫代理池实现方案
  10. 《Python编程从入门到实践》记录之类的使用
  11. js-array自增长方式
  12. content 控件(24)
  13. 不能错过!CIO不可不知的“数据经济学” | 凌云时刻
  14. Python爬虫,超简单地实现一键提取阴阳师原画
  15. dev、test和staging、prod是什么意思?
  16. TP6 接口返回三要素
  17. 揪出系统中秘密隐藏的木马(下)
  18. dns服务器异常不能上网怎么修复,DNS错误无法正常上网怎么办?
  19. workerman入门之GatewayWorker的使用
  20. Fortunate Finds

热门文章

  1. linux下tomcat服务器的启动和关闭以及查看实时打印日志
  2. java实现mysql的主从切换(第二部分)
  3. [IOS]clang diagnostic、Wprotocol ..
  4. [转]html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
  5. 用ORACHK自己主动化检查数据库系统的健壮性
  6. 解决linux下无线网卡被物理禁用问题
  7. virtualBox下安装Linux6.4
  8. 使用JMX透过防火墙远程监控tomcat服务
  9. Linux下VSFTP配置全攻略
  10. 获取webbrowser中元素的屏幕坐标