首页
学习
活动
专区
圈层
工具
发布

mysql 存图片字结

基础概念

MySQL是一种关系型数据库管理系统,广泛用于存储和管理数据。在MySQL中存储图片数据通常有两种方式:

  1. BLOB(Binary Large Object):用于存储大量的二进制数据,如图片、音频、视频等。
  2. 文件路径存储:将图片文件存储在服务器的文件系统中,数据库中只存储文件的路径。

优势与类型

BLOB存储

优势

  • 数据集中管理,便于备份和恢复。
  • 可以直接从数据库中读取图片数据进行展示。

类型

  • TINYBLOB:最大长度为255字节。
  • BLOB:最大长度为65,535字节(64KB)。
  • MEDIUMBLOB:最大长度为16,777,215字节(16MB)。
  • LONGBLOB:最大长度为4,294,967,295字节(4GB)。

文件路径存储

优势

  • 减轻数据库的负担,提高数据库性能。
  • 图片文件可以独立于数据库进行备份和迁移。

应用场景

  • BLOB存储:适用于图片数据量较小,且需要频繁从数据库中读取图片的场景。
  • 文件路径存储:适用于图片数据量较大,或者需要独立管理图片文件的场景。

常见问题及解决方法

1. 存储图片时遇到“Data too long for column”错误

原因:插入的图片数据超过了BLOB类型的最大长度限制。

解决方法

  • 检查图片数据的大小,确保不超过所选BLOB类型的最大长度。
  • 如果图片数据较大,可以考虑使用MEDIUMBLOB或LONGBLOB类型。
代码语言:txt
复制
-- 示例:插入图片数据
INSERT INTO images (name, data) VALUES ('example.jpg', LOAD_FILE('/path/to/example.jpg'));

2. 读取图片数据时遇到“Incorrect string value”错误

原因:MySQL字符集不支持二进制数据的存储。

解决方法

  • 确保数据库和表的字符集设置为BINARYVARBINARY
代码语言:txt
复制
-- 示例:设置表字符集为BINARY
ALTER TABLE images CONVERT TO CHARACTER SET BINARY;

3. 文件路径存储时图片无法访问

原因:文件路径不正确或服务器配置问题。

解决方法

  • 确保文件路径正确,并且服务器有权限访问该路径。
  • 检查服务器的文件系统权限,确保Web服务器可以读取该文件。
代码语言:txt
复制
-- 示例:查询图片路径
SELECT path FROM images WHERE id = 1;

参考链接

通过以上信息,您可以更好地理解MySQL存储图片数据的方式及其相关问题,并找到相应的解决方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mysql体系结(基础)

mysql多种连接方式介绍 socket 前提必须创建和授权localhost用户,数据库启动才会生成socket文件 mysql启动的时候会自动生成一个套接字的文件,可以通过本地访问这个文件登录mysql...文件默认在/tmp/mysql.sock 可以在配置文件指定参数 socket=文件路径 来指定文件存放位置 mysql -uroot -p -S/tmp/mysql.sock #mysql 默认去/..._3306/client-key.pem mysql配置文件 mysql配置文件启动顺序 mysqld --help --verbose |grep my.cnf /etc/my.cnf /etc/mysql...都会调用里面的参数 [client] 标签项 会覆盖所有客户端程序 mysql,mysqldump mysql启动关闭流程 启动 在mysql目录下有个support-files目录 下面有个mysql.server.../mysql/my.cnf [mysqld] user=mysql basedir=/usr/local/mysql datadir=/data/mysql/data_3307 socket=/tmp/

91540

Redis是否可以存图片、视频?

一、Redis是否可以用于存储图片、视频? 前几天看到某大型家电工厂的工业互联网系统架构图,发现用MongoDB存储图片及视频。...那Redis同样也是Json类型的远程数据字典服务器,也可以用于存储图片、视频。实际Redis可以用512MB的空间存储用于存储字符串型的数据。...虽然技术上可以这么做,但Redis原本就是内存型数据库,用于存储图片、视频是非常不划算的。建议多利用HDFS、NAS、对象存储等分布式的云存储系统。 二、Redis如何存储真实对象的名称?...像MongoDB一样,后起之秀,一般对复制、分片是原生支持,比起Mysql等关系数据库系统的复杂配置,Redis已经可以原生支持这两个功能,而且配置非常简单。

10.6K20
  • 结MySQL 的一些知识点:MySQL 安装

    MySQL 安装所有平台的 MySQL 下载地址为: MySQL 下载 。 挑选你需要的 MySQL Community Server 版本及对应的平台。...----Linux/UNIX 上安装 MySQLLinux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址:MySQL - MySQL服务器。...你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。MySQL-client - MySQL 客户端程序,用于连接并操作Mysql服务器。...----使用 MySQL Client(Mysql客户端) 执行简单的SQL命令你可以在 MySQL Client(Mysql客户端) 使用 mysql 命令连接到 MySQL 服务器上,默认情况下 MySQL...max_connections=20# 服务端使用的字符集默认为8比特编码的latin1字符集character-set-server=utf8# 创建新表时将使用的默认存储引擎default-storage-engine

    46410

    iOS设置图片拉伸不变形区域引实现方法结

    引 在开发中,我们可能会遇到这种情况:设计做了一张图,比如是按钮或文本条的背景,但由于文字长度不一,因此按钮或者文本条大小也会变化,如果直接设为背景,那么势必导致图片被拉伸,如果是整体图片还没什么,但如果是一些特殊的图片...,比如这种: 由于右下角有一个箭头,正常来说不管按钮怎么变化大小,右下角的区域都应该是固定大小的,这就要求限制该区域不论图片怎么拉伸都不拉伸这个区域。...:平铺模式,通过重复显示UIEdgeInsets指定的矩形区域来填充图片 我们通过设置后,可以得到确保右下角不被拉伸的效果: 图中上面的是没做设置的,下面是做了设置的,可以看出效果很明显。...Assets中,创建对应的图片集合才能够生效,否则效果是不尽如人意的。...结 这算是一个比较常用到的小技巧了,记录下来,也希望能够帮助还不知道的人。 ---- 示例工程:https://github.com/Cloudox/ImageAreaStretchDemo

    2K20

    Nginx+lua+mysql实时存日志

    刚开始的时候看了Nginx和mysql的连接模块。比如说nginx-mysql-module,可以连接mysql。...mysql访问阶段属于内容生成阶段,所以代理运行的时间和状态,mysql都无法获取的到。因此,这种通过nginx直连mysql的方式无法达到我们的要求。...Mysql 访问权限的问题 不但访问Mysql的Mysql用户需要有操作对应数据库的权限,还需要调用Mysql命令的用户具有访问mysql的权限。...Mysql客户端显示数据的编码,连接Mysql用的编码(即数据存入mysql时,数据的编码),Mysql存储用的编码(字段,表,数据库三种格式可能不同)。...不管Mysql存储用的编码是什么,只要Mysql客户端显示数据的编码和连接Mysql用的编码相同,数据就能通过mysql客户端正确显示。

    3.3K70

    MySQL怎么存文本不乱码?

    导读 MySQL里怎么存储那些看起来会乱码的字符? 我在“UTF8字符集的表怎么直接转UTF8MB4”一文中介绍了如何把表字符集由UTF8直接转换成UTF8MB4的几种方法。...如果是通过WEB接口存储数据,则建议在browser端、server端全都采用UTF8字符集,MySQL Server端采用UTF8/UTF8MB4均可(针对大多数文本,其实UTF8字符集就足够存储的了...MySQL采用UTF8MB4字符集时,存储文本实际消耗字节数是由文本内容的字节数决定的,并非总是需要4字节,列举几种情况: 输入字符集任意,且存储ASCII字符时,每个字符需要1byte; 输入字符集是...相应的代码如下: select vchar, length(vchar) as vcharlen 测试接口链接: utf8mb4字符集兼容性测试接口 如果想要写入4字节的汉字,可以从龙泉寺提供的字库拷贝过来...参考及延伸阅读 UTF8字符集的表怎么直接转UTF8MB4 FAQ系列 - 调用存储过程时报错 Illegal mix of collations 听说JOIN的列类型一定要一样 https://dev.mysql.com

    2.6K20

    MySQL 怎么存文本不乱码?

    导读 MySQL里怎么存储那些看起来会乱码的字符?...如果是通过WEB接口存储数据,则建议在browser端、server端全都采用UTF8字符集,MySQL Server端采用UTF8/UTF8MB4均可(针对大多数文本,其实UTF8字符集就足够存储的了...MySQL采用UTF8MB4字符集时,存储文本实际消耗字节数是由文本内容的字节数决定的,并非总是需要4字节,列举几种情况: 输入字符集任意,且存储ASCII字符时,每个字符需要1byte; 输入字符集是...开发这个接口时,发现钉钉中的个别表情符是由2个4字节编码组成的,也就是说一个emoji表情符,其实是需要8个字节的。...相应的代码如下: select vchar, length(vchar) as vcharlen 测试接口链接: utf8mb4字符集兼容性测试接口 如果想要写入4字节的汉字,可以从龙泉寺提供的字库拷贝过来

    2.8K10

    如何2小时搭建一套极简版-现结进销存系统

    很多朋友做现结生意时,总被进销存搞得很抓狂。进货时没记清,卖货时对不上,现金一多,账就乱成一锅粥。...注:本文示例所用方案模板:简道云现结进销存系统,给大家示例的是一些通用的功能和模块,都是支持自定义修改的,你可以根据自己的需求修改里面的功能。...现结进销存系统与普通进销存系统有何区别?现结进销存系统与普通进销存系统的最大区别在于交易模式和数据处理逻辑。普通进销存系统(如畅捷通、金蝶)主要处理"先开单,后付款"的生意,比如客户先下单,再付钱。...而现结生意是"钱货两清",客户付现金,当场给货。系统需要特别处理"现结",不能有"待付款"状态。普通进销存系统功能全但太复杂,小店老板用不上。...所以,普通系统用在现结生意上,就像用跑车送外卖,太浪费了。极简系统,专门针对现结,用起来才顺手。我见过一家便利店,买了普通进销存系统,结果只用到库存和销售,其他模块根本不用,反而增加了使用难度。

    58200

    CDB for MySQL 8.0列存引擎CSTORE介绍

    CDB for MySQL 8.0是腾讯TEG云架构平台部推出的新一代MySQL产品。...CSTORE的查询引擎吸收了MySQL查询引擎的优点,又针对列存的特点做了优化。因此,MySQL原生支持的大部分查询都可以不修改而继续运行,并且带来性能的提升。...(5)全面兼容MySQL生态 CSTORE引擎作为MySQL的一个内置引擎,全面兼容原来的MySQL生态,应用程序可以继续使用之前的开发接口和大部分功能而无需修改。...这类业务可以利用MySQL开发生态的完备性以及高性价比。...「 总结 」 至此,对列存引擎CSTORE,我们都有大概的了解。 未来,我们会持续对列存引擎CSTORE进行完善并尽快正式发布给大家使用,敬请期待~ ?

    3.1K72

    MySQL关键字

    数据控制语言(DCL)关键字GRANT:用于授予用户权限。REVOKE:用于撤销用户的权限。事务控制关键字START TRANSACTION:开始一个新的事务。COMMIT:提交当前事务。...其他控制流关键字SAVEPOINT:设置事务的保存点。RELEASE SAVEPOINT:释放一个事务的保存点。子查询和集合操作关键字IN:用于指定一个子查询或列表中的值。...连接操作关键字CROSS JOIN:笛卡尔积,返回两个表的所有可能组合。INNER JOIN:内连接,只返回两个表中匹配的行。...聚合函数关键字SUM:返回数值列的总和。COUNT:返回行数或非空值的数量。MAX:返回数值列的最大值。MIN:返回数值列的最小值。AVG:返回数值列的平均值。字符串函数关键字LIKE:用于模式匹配。...数学函数关键字ABS:返回数值的绝对值。ROUND:四舍五入到指定的小数位数。CEILING 或 CEIL:向上取整。FLOOR:向下取整。日期和时间函数关键字NOW:返回当前日期和时间。

    2K00

    MySQL Explain关键字

    一、Explain是什么 使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理你的 SQL 语句的。分析你的查询语句或是表结构的性能瓶颈。...因为只匹配一行数据,所以很快 如将主键置于 where 列表中,MySQL 就能将该查询转换为一个常量。 eq_ref 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。...8、rows rows 列显示 MySQL 认为它执行查询时必须检查的行数。越少越好!...9、extra Using filesort 说明 mysql 会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL 中无法利用索引 完成的排序操作称为“文件排序”。...Using temporary 使用临时表保存中间结果,MySQL 在对查询结果排序时使用临时表。常见于排序 order by 和分组查询 group by。

    2.4K20
    领券