我有很多记录,其中文本被存储在MySQL中的blob中。为了方便处理,我想改变数据库的格式为文本…有什么想法可以轻松地进行更改,从而不中断数据-我猜它将需要正确编码?
当前回答
我也遇到过同样的问题,下面是我的解决方案:
在表中为每个blob列创建文本类型的新列 将所有blob转换为文本并保存在新列中 删除blob列 将新列重命名为已删除列的名称
修改mytable 添加字段field1_new文本不为空, ADD COLUMN field2_new TEXT NOT NULL 更新mytable set field1_new = CONVERT(field1 USING utf8), field2_new = CONVERT(field2 USING utf8); 修改mytable 删除列field1, 删除列field2; 修改mytable 修改字段field1_new field1文本, 修改字段field2_new field2文本;
其他回答
SELECCT TO_BASE64(blobfield)
FROM the Table
为我工作。
CAST(blobfield AS CHAR(10000) CHARACTER SET utf8)和CAST(blobfield AS CHAR(10000) CHARACTER SET utf16)没有显示我想要得到的文本值。
我不明白为什么不那么容易:
UUID_TO_BIN('77dea2ad-3c8c-40c6-a278-7cf1a1ac9384')
and
BIN_TO_UUID(FIELD)
使用phpMyAdmin,您还可以设置选项来显示BLOB内容和显示完整的文本。
这些答案对我都没用。当转换为UTF8时,当编码器遇到一组字节它不能转换为UTF8它将导致一个?导致数据丢失的替换。你需要使用UTF16:
SELECT
blobfield,
CONVERT(blobfield USING utf16),
CONVERT(CONVERT(blobfield USING utf16), BINARY),
CAST(blobfield AS CHAR(10000) CHARACTER SET utf16),
CAST(CAST(blobfield AS CHAR(10000) CHARACTER SET utf16) AS BINARY)
您可以在MySQL Workbench中检查二进制值。右击字段->在查看器中打开值->二进制。当转换回二进制时,二进制值应该与原始值相同。
或者,你也可以使用base-64,这是为了这个目的:
SELECT
blobfield,
TO_BASE64(blobfield),
FROM_BASE64(TO_BASE64(blobfield))
如果您使用的是MYSQL-WORKBENCH,那么您可以正常地选择blob列,然后右键单击列,然后在编辑器中单击打开值。请参考截图:
推荐文章
- 在SQL中更新多个列
- 如何删除表中特定列的第一个字符?
- MySQL OR与IN性能
- 哪个更快/最好?SELECT *或SELECT columnn1, colum2, column3等
- 将值从同一表中的一列复制到另一列
- GROUP BY with MAX(DATE)
- 删除id与其他表不匹配的sql行
- 等价的限制和偏移SQL Server?
- MySQL CPU使用率高
- INT和VARCHAR主键之间有真正的性能差异吗?
- 拒绝访问;您需要(至少一个)SUPER特权来执行此操作
- 为什么我不能在DELETE语句中使用别名?
- 在SQL Server Management Studio中保存带有标题的结果
- 从存储引擎得到错误28
- "where 1=1"语句